在我们的 Rails 应用程序中,用户通常会一次打开多个浏览器选项卡数小时或数天。当在这些选项卡之一中,用户注销然后重新登录(或会话到期并创建新会话)时,就会出现问题。
这会导致所有其他选项卡上的 CSRF 真实性令牌变得无效。如果他们尝试提交任何表单或在这些选项卡上发出任何 ajax 请求而不刷新,他们将得到一个错误(实际上会被注销,因为这是传递错误真实性令牌时的默认 Rails 行为)。
这种行为显然是不可取的。我想知道人们如何优雅地处理用户打开您网站的窗口但真实性令牌已过期的情况。
我不想做的只是将他们重定向到登录页面,因为那样他们可能会丢失他们的工作,例如,如果他们一直在写一篇很长的博客文章或其他东西。
想到的解决方案是使用一些 javascript 来轮询服务器以检查真实性令牌是否已更改,或轮询用户的 cookie 以检查会话是否已更改。我从来没有听说过有人这样做,所以我想看看社区是怎么想的。