How to gracefully handle login expiration for an Ajax call?
我的Web应用程序由许多对服务器端
如果客户机在我的页面上停留很长时间,令牌可能会过期。服务器将在客户端发出下一个HTTP请求时检测到它(而不仅仅是REST调用)。我使用
但是上面的方法有一个问题:"如何优雅地处理重定向到客户机端的登录页面响应?"
对于由
non-Ajax 发起的HTTP请求,我可以依靠浏览器来处理对登录页面响应的重定向,并使页面自动跳转。对于由
Ajax 发起的HTTP请求,我似乎需要在each ajax调用的completion handler 中添加额外的逻辑,以检测对登录页面响应的重定向,imperatively 使页面跳转。
还是我完全走错了路?
参考文献:
JWT(JSON Web令牌)自动延长到期时间
我应该为我的API使用哪种身份验证策略?
隐式和显式身份验证
添加1:
似乎浏览器将透明地处理302重定向。所以也许我可以返回302重定向到登录页面,无论是Ajax调用还是纯页面访问。我稍后会尝试回复。
从这里:
If the response is an HTTP redirect (status code 301, 302, 303 or
307), then it MUST be transparently followed (unless it violates
security or infinite loop precautions). Any other error (including a
401) MUST cause the object to use that error page as the response.
捕获在javascript中找到的302
如何在jquery ajax调用后管理重定向请求
正因为这个原因,Web API不应该使用
Web应用程序应该返回
是的,我认为你是对的。
对于非Ajax,可以在服务端使用重定向处理它。
对于Ajax,可以根据Ajax结果切换页面。
302重定向不适用于javascript(ajax)调用,它只从javascript内部调用新页面,而不是实际的浏览器。
整洁的解决方案是返回带有错误消息的JSON对象,并显示该错误消息。或者使用javascript将位置更改为登录页面
通常,可以使用全局Ajax事件处理程序来处理会话过期。
尝试捕获
老实说,我没试过,但值得一试。