【发布时间】:2014-04-24 14:26:27
【问题描述】:
我正在使用 Devise 3.2.0 进行身份验证,但在执行以下操作时发现了一个问题:
- 标签 1:登录到应用
- 标签 2:转到应用中的任何页面
- 标签 2:退出退出(成功)
- 标签 1:退出 (失败 - 请参阅下面的例外情况)
引发异常:
ActionController::InvalidAuthenticityToken in Devise::SessionsController#destroy
在开发日志中我看到:
无法验证 CSRF 令牌的真实性
堆栈跟踪的前三行是:
ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):
actionpack (4.0.0) lib/action_controller/metal/request_forgery_protection.rb:163:in `handle_unverified_request'
actionpack (4.0.0) lib/action_controller/metal/request_forgery_protection.rb:170:in `handle_unverified_request'
devise (3.2.0) lib/devise/controllers/helpers.rb:198:in `handle_unverified_request'
如何确保连续退出不会引发异常?
【问题讨论】:
-
它不是连续退出,当您已经退出时,您正在尝试退出。那么,当您从 tab2 注销时,为什么不从 tab1 注销用户
-
我不知道你为什么说这不是连续退出。 连续意味着一个接一个。如果我在退出另一个选项卡后尝试在一个选项卡中退出,就我而言,这是连续的。但关键是,这是用户可以采取的非常合理的操作。举一个例子,用户在一个站点上打开多个标签页,当他们在一个标签页中退出,然后继续关闭其他标签页时,他们可能会尝试再次退出(由于登录的外观所有其他选项卡)。
-
@user664833 现在我明白了。是的,Devise 应该已经处理了注销场景而不会引发讨厌的错误。但同样,他们可能会说这就是我们所说的
customization。在 Devise 实施之前,KirtiThorat 的解决方法可能是更好的解决方案。 -
在 Devise Github Repo 上查看 @freddyrangel github.com/plataformatec/devise/issues/2934 提交的问题。您可以通过支持该问题来参与讨论。
标签: ruby-on-rails exception devise csrf