我有一个使用设备保护的应用程序,会话超时为 30 分钟。使用设计,正常导航一切正常,如果用户在超时时单击链接,他们会被重定向回登录屏幕,并显示一条消息“您的会话已过期,请重新登录以继续。”,非常好。
不过我在很多地方都有ajax。如果会话超时并且用户执行 ajax 操作,我想要与上面相同的行为,而不是在后台默默地失败并出现 401 错误。
到目前为止,我在每个页面上都有这个 jquery 代码来捕获 401 并重新加载:
$(document).ajaxError(function(e, error) {
switch(error.status) {
case 401: {
// unauthorised (possible timeout)
location.reload();
break;
}
它工作得很好,但有一个恼人的问题:
因为 ajax 请求首先到达 devise,所以当我的应用程序重新加载页面时,我会被定向到登录页面,但我没有看到超时消息,而是看到未经身份验证的“您需要登录或注册才能继续”。信息。
有没有办法确保在第二次请求时设备仍然显示超时消息?
我认为您需要手动显示此消息,例如通过重定向到特定网址或设置某些查询参数。
问题是,在 401 请求之后,您获得了一个新会话,当您重新加载浏览器时,下一个请求将使用一个空会话访问您的应用程序。这就是您收到未经身份验证的消息的原因。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)