gpt4 book ai didi

ruby-on-rails - 多个选项卡注销会在后续登录时导致 InvalidAuthenticityToken

转载 作者:行者123 更新时间:2023-12-04 11:33:18 25 4
gpt4 key购买 nike

我有一个使用 Devise 进行身份验证的应用程序。登录字段位于主页上。如果我打开两个选项卡(选项卡 A 和选项卡 B,然后手动注销每个选项卡(先是选项卡 A,然后是选项卡 B),然后返回选项卡 A 并尝试登录,我会收到 InvalidAuthenticityToken 错误。

然后我可以返回选项卡 B 并尝试登录并获取错误。然后返回选项卡 A 并尝试登录并再次出现错误。这将无限期地发生,直到您在同一选项卡中收到 InvalidAuthenticityToken 错误后立即尝试登录该选项卡。

我可以在 ApplicationController 中设置以下内容:

protect_from_forgery :with => :null_session

但是现在第一次登录尝试只会返回主页,而不会说明您登录失败的原因(您只会再次看到主页而不是 InvalidAuthenticityToken 错误页面)。如果您然后尝试再次登录(在同一选项卡上),它将成功。

而且我知道为什么会发生这种情况:注销时正在重置 session ,这将重置 csrf_token在 session 中。第二个选项卡重置该标记,但第一个选项卡仍具有前一个选项卡。因此,当第一个选项卡提交表单时 csrf_token是无效的。

我可以在服务器端做些什么吗?或者我将不得不做一些疯狂的解决方法,比如在您注销时在 localStorage 中设置一些东西,或者打开一个 websocket 以便我可以在主页上收到另一个选项卡已重置 CSRF token 的通知?

让打开多个选项卡的用户逐个浏览并手动注销似乎是一种罕见的情况,但这只是模拟站点的实际行为:10 分钟后自动将其注销。这实际上在我们的应用程序中经常发生。

最佳答案

Rails 允许您使用 rescue_from使用回调函数挽救您选择的错误。
您可以在这里找到更多信息:
https://api.rubyonrails.org/classes/ActiveSupport/Rescuable/ClassMethods.html
修复了一个几乎相同的问题,我的 Sessions Controller 的顶部看起来像这样

class SessionsController < ApplicationController

rescue_from ::ActionController::InvalidAuthenticityToken, with: :redirect_home
我在同一个 Controller 中定义的回调看起来像这样
def redirect_home
redirect_to root_url
end

关于ruby-on-rails - 多个选项卡注销会在后续登录时导致 InvalidAuthenticityToken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25794541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com