【问题标题】:Informing an ajax call that the session has timed-out or user needs to re-authenticate通知 ajax 调用会话已超时或用户需要重新验证
【发布时间】:2014-06-26 16:34:27
【问题描述】:

我已经确定了一个挑战,那就是在请求是 ajax 时记录和继续/通知用户有关服务器异常的能力。在基本控制器中使用 OnException 并查找请求是 ajax 我可以返回一个自定义的“...uhoh”视图来呈现。

现在,我正在与未经过身份验证的部分作斗争。我正在努力使用这个修改过的代码来代替我的基类中的 [Authorize] 属性。

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
    public class AjaxAuthorizeAttribute : AuthorizeAttribute
    {
        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            if (filterContext.HttpContext.Request.IsAjaxRequest())
            {
                filterContext.Result = new JsonResult{Data = new{NotAuthenticated=1}, JsonRequestBehavior = JsonRequestBehavior.AllowGet};
            }
            else
            {
                base.HandleUnauthorizedRequest(filterContext);
            }
        }
    }

目前,有一些区域可以将 NotAuthenticatedas 数据返回到客户端中的 Ajax 调用。我会以正确的方式解决这个问题吗?刚刚找到以 Ajax 结尾的主要流程。

if(returnData.NotAuthenticated){
    if (that.onNotAuthenticated != null)
       that.onNotAuthenticated();
    else
      _loadView(viewElement, "Request requires authorization. Please login again.");
} else
      _loadView(viewElement, returnData);
}

但是,我正在使用 Kendo 完整库和可能的其他库。当通过 Ajax 调用触发时,是否有更好的“全局”方式来处理会话超时或身份验证重定向?

请帮忙!

【问题讨论】:

  • 一个关于提问的建议,保持简单和简短,只提供必要的信息。我刚刚读了你的最后一段:)

标签: c# ajax asp.net-mvc asp.net-mvc-4 kendo-ui


【解决方案1】:

我认为Global Ajax Event Handlers 满足您的需求。例如下面的代码设置了一个全局错误处理程序,如果她的会话超时,它将把用户重定向到登录页面。

$(document).ajaxError(function (event, jqxhr, settings, exception) {
    if (jqxhr.status == 401 || jqxhr.statusText == "Unauthorized") {
        window.location.href = '/login';
    }
});

【讨论】:

  • 谢谢,如果这会取代本地处理程序或在之前或之后联合运行,您是否会突然想到?
  • @lrb:不客气。 AFAIK,它不会替换任何 本地处理程序,它会与它们一起运行。我在我们的许多网络应用程序中都使用过它。
猜你喜欢
  • 1970-01-01
  • 2016-06-14
  • 2012-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-03
  • 2014-07-24
  • 2017-04-22
相关资源
最近更新 更多