【问题标题】:Backbone Collection.fetch() when after session timeout会话超时后的主干 Collection.fetch()
【发布时间】:2012-11-12 16:06:35
【问题描述】:

我在现有的 ASP.NET WebForm 网站中添加了一个 ASP.NET MVC4 子 Web 应用程序。整个网站都在使用forms authentication

在我的 MVC4 客户端中,我使用Backbone.js 来构建应用程序,而客户端应用程序很可能是一个 SPA。

一切正常,但会话超时后我的应用程序没有重定向到登录页面。

我尝试了 Collection.fetch 方法的错误回调,它在会话超时后尝试获取时被触发(这很好)。

但是响应状态码为200(OK),响应内容为登录页面内容。

所以,我的问题是,在错误处理程序中,我如何知道回调是由会话超时还是任何其他意外错误触发的?

如果确定,我应该如何让Backbone在引用当前页面的同时将页面重定向到登录页面?

【问题讨论】:

    标签: session backbone.js asp.net-mvc-4


    【解决方案1】:

    Here 是 Phil Haack 在博客上写的内容

    帖子摘录:

    可能的解决方案

    我将介绍一些我在网络上看到的可能的解决方案,然后介绍我喜欢的一个。并不是说这些其他解决方案是错误的,而是它们只在某些情况下是正确的。

    删除表单身份验证

    如果您不需要 FormsAuth,一个简单的解决方案是按照this post 的建议删除表单身份验证模块。如果您的唯一目的是使用 ASP.NET 来托管 Web API 服务并且不需要表单身份验证,那么这是一个很好的解决方案。但如果您的应用既是 Web 应用程序又是 Web 服务,这不是一个很好的解决方案。

    注册一个 HttpModule 以将重定向转换为 401

    This blog post 建议注册一个将任何 302 请求转换为 401 的 HTTP 模块。这种方法有两个问题。首先是它打破了重定向是合法的而不是 FormsAuth 的结果的情况。二是需要手动配置一个HttpModule。

    Install-Package MembershipService.Mvc

    我的同事 Steve Sanderson 使用他的 MembershipService.Mvc 和 MembershipService.WebForms NuGet 包有一个更好的方法。这些包将 ASP.NET 成员身份公开为一项可以从多个设备调用的服务。

    来自此博客评论的更多信息

    我们遇到了同样的问题。但是我们所做的是挂钩到 AuthenticateRequest(就像您所做的那样),我们还检查了请求以查看它是否是 ajax(再次,就像您所做的那样)。但是此时,我们只是返回了一个像{location: 'http://www.domain.com/path-to-login-page'} 这样的 JSON,并且我们只是在该方法中以 HTTP 代码 200 结束响应。这样,jQuery 仍然得到一个 JSON 结果。但如果结果具有“位置”属性,我们只需将客户端重定向到登录页面。这就是我们的方式,它就像一种魅力。

    【讨论】:

    • 感谢您的详细回答和选择,我会尝试您的建议并找到适合我的建议,如果有任何发现将在此处更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 2014-03-22
    相关资源
    最近更新 更多