• 解决由AJAX请求时forms认证实效的重新认证问题


    前言:

    当用AJAX请求一个资源时,服务器检查到认证过期,会重新返回302,通过HTTP抓包,是看到请求了登录页面的,但是JS是不会进行跳转到登录页面。

    使用环境:

    ASP.NET MVC 4

    JQUERY EASY UI

    待解决的问题

    1,如果AJAX请求时认证实效,那么跳转到登录页面重新认证,然后才能进行其它操作。(必须解决)

    2,在认证成功之后最好不要返回首页,然后用户又得重新进行进入刚才页面。

    解决方法

    后端

    添加一个自定义的AuthorizeAttribute

    实现原理:如果是AJAX请求,并且没有进行授权,那么就返回 HTTP 401,代码如下:

    Code

    前端

    如果想让所有页面都能捕获401错误,那么就需要在模版页_Layout.cshtml中用JS进行判,代码如下:

    Code

    虽然现在实现了认证。

    那么如何在登录页面认证成功之后自动把该窗口给关闭了?

    因为是用iframe嵌套的登录页面,所以这个属性很重要“parent”

    实现方式:

    1,在_Layout.cshtml中再加一个JS方法,用于登录成功后的回调函数,代码如下:

    Code

    2,在Controller中获取传过来的参数:
                ViewBag.AJAX_Login = Request.QueryString["AJAX_Login"];
    在VIEW中

    如果认证成功,就调用LoginSuccessCallBack方法关闭窗口,在重新获取刚才没有请求成功的数据。

    Code

    参考:

    http://www.cnblogs.com/dudu/p/3384234.html

    http://stackoverflow.com/questions/2472578/is-it-possible-to-use-redirecttoaction-inside-a-custom-authorizeattribute-clas/2472878#2472878

    http://stackoverflow.com/questions/2580596/how-do-you-handle-ajax-requests-when-user-is-not-authenticated

    http://stackoverflow.com/questions/7532261/ajax-and-formsauthentication-how-prevent-formsauthentication-overrides-http-401/7628655#7628655

  • 相关阅读:
    OpenCV/python读取,显示,保存图像
    机器学习的基本分类
    Qt Designer常用部件介绍
    C#数据类型列表
    SQL-Base 函数
    SQl 基本函数
    SQL 插入数据
    SQL-Base 用表组织数据
    SQLserver的基本用法
    C#MyBank(自己的看法,转账有点小问题)
  • 原文地址:https://www.cnblogs.com/jiguixin/p/3388179.html
Copyright © 2020-2023  润新知