在ajax请求期间处理MVC表单身份验证过期问题
本文关键字:表单 身份验证 过期 问题 MVC 处理 ajax 请求 | 更新日期: 2023-09-27 18:00:47
在我的MVC3应用程序中,有几种情况下,我会显示一个启动屏幕,通过jQuery的ajax方法动态加载部分视图,并将html注入DOM。
问题是,如果身份验证过期,然后用户启动ajax调用,则被调用的操作会重定向到登录页面,因此登录页面的html会被返回并注入DOM,这显然会让用户非常困惑。
人们通常如何应对这种情况?我想这是很常见的,因为表单对html的auth和ajax请求是我经常做的事情。
下面是我为这种情况编写的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" };
}
}
}
}