不能处理在Ajaxredirect302,为什么?
我有一个使用Forms Authentication在asp.net mvc中编写的后端服务器。 当用户没有通过身份validation时,服务器将自动发送302redirect到login操作并返回login页面。
在客户端,我有一个项目列表。 这个列表只能被authentication的用户访问。 在页面上,我有一个使用Ajax刷新列表的button(jQuery的$ .ajax函数)。
现在,我的问题是身份validation票证超时,用户点击刷新button:
- 我的函数发送一个ajax请求来获取刷新列表
- 服务器检测到身份validation票据无效并发出302redirect。
- 浏览器自动处理这个302响应,并强制我的ajax函数发送另一个ajax请求到Login动作,最后的结果是一个状态为200的HTML。我的脚本很混乱,因为这个列表也是一个状态为200的HTML。
我想要的是,当身份validation票证超时,用户点击刷新button,我应该能够检测到,并显示一条消息,要求用户login。
我尝试通过在Login操作中添加自定义标题(IS_LOGIN)来解决这个问题,并检查我的ajax响应。 但这不是一个好的解决scheme。
所以我的问题是:
- 处理这个问题的最好方法是什么?
- 为什么浏览器不让脚本处理302响应? 并自动强制我们的ajax创build另一个请求。 这是浏览器或jQuery库的问题? 有什么理由呢? (安全,…)
感谢您的回复。
当它是一个XHR,但不应该redirect的呼叫,但回应与401 Unauthorized
并在您的callback处理。 我不知道ASP.NET,但是我做了一些与Spring Security类似的东西。
inheritance人的概念:
- 获取已authentication的状态
- 检查
X-Requested-With: XMLHttpRequest
的标题 - 当发现和未经authentication回应
401 Unauthorized
- 未find且未经过身份validation的redirect。
底线是在某些情况下XHR调用需要被处理不同于其他HTTP请求。 如果相同的资源位于另一个位置,则只应该redirectXHR。
回答你的问题
您不能使用XHRcallback处理redirect,因为浏览器会自动处理这些redirect。 你只会回到redirect的位置。