在ajax请求期间处理MVC表单身份验证到期[重复]

Posted

技术标签:

【中文标题】在ajax请求期间处理MVC表单身份验证到期[重复]【英文标题】:Dealing with MVC forms authentication expiration during ajax request [duplicate] 【发布时间】:2011-09-24 09:20:39 【问题描述】:

在我的 MVC3 应用程序中,有几种情况我会显示启动画面,通过 jQuery 的 ajax 方法动态加载部分视图并将 html 注入 DOM。

问题是,如果身份验证过期,然后用户发起 ajax 调用,被调用的操作会重定向到登录页面,所以登录页面的 html 被返回并注入到 DOM 中,这显然是在进行给用户带来极大的困惑。

人们通常如何处理这种情况?我想这很常见,因为我经常做 html 的表单 auth 和 ajax 请求。

【问题讨论】:

【参考方案1】:

这是我针对这种情况编写的 AuthorizeAjax 操作过滤器,您可以按如下方式使用它:

[AuthorizeAjax]
public ActionResult GetNewData()

    //controller logic here

通过将以下内容添加到您的项目中,您所需要的只是共享文件夹中名为“AjaxAccessError”的部分视图,我个人返回一个指向真实登录页面的链接:)

希望这会有所帮助!

namespace System.Web.Mvc

    public class AuthorizeAjaxAttribute : AuthorizeAttribute
    
        private bool _failedAuthorisation;

        protected override bool AuthorizeCore(HttpContextBase httpContext)
        
            if (!httpContext.User.Identity.IsAuthenticated)
            
                _failedAuthorisation = true;
                return false;
            
            else
            
                String[] RoleArray = Roles.Split(',');
                foreach (var r in RoleArray)
                
                    if (httpContext.User.IsInRole(r))
                    
                        _failedAuthorisation = false;
                        return true;
                    
                

                _failedAuthorisation = true;
                return false;
            
        

        public override void OnAuthorization(AuthorizationContext filterContext)
        
            base.OnAuthorization(filterContext);

            if (_failedAuthorisation)
            
                filterContext.Result = new PartialViewResult  ViewName = "AjaxAccessError" ;
            
        
    

【讨论】:

您最终不会因为 FormsAuthentication 模块而返回 302 吗?

以上是关于在ajax请求期间处理MVC表单身份验证到期[重复]的主要内容,如果未能解决你的问题,请参考以下文章

MVC 身份验证超时/会话 cookie 删除后的 Ajax 请求

Python请求ajax表单身份验证问题

使用 WIF 和 jquery ajax 请求时 ASP.NET MVC 3 中的会话 Cookie 过期处理

在 MVC 2 中验证 REST 请求

ASP.NET MVC - 在匿名 Ajax 请求上刷新 Auth Cookie

请求在身份验证后重定向期间挂起