【问题标题】:Devise @token not resolving correctly (Devise 3.2.3)设计 @token 无法正确解析(设计 3.2.3)
【发布时间】:2014-05-31 20:28:51
【问题描述】:

使用 Devise 3.2.3 和 Devise Confirmable 运行 Rails 4 应用程序。

Devise 为新创建的用户生成一个确认令牌,该用户已正确存储在数据库中,然后发送一封带有确认说明的邮件。出于安全原因,在邮件程序中发送的令牌与存储在数据库中的确认令牌不同,但在邮件程序中发送的令牌并未解析为用户的正确确认令牌,因此永远不会确认用户。

这是我所说的一个例子:

数据库中的用户在创建后具有如下Devise设置的confirmation_token attr:

beaa0ed7c9c2da72a99381ee705aa8ebd91672a5c18f5a44deeb43d0665080c4

以下链接将通过电子邮件发送给用户:

http://localhost:3000/users/confirmation?confirmation_token=ZEagTsW1o1Ex_xGdQq7D

我已经确认邮件模板使用的是新的@token 方法而不是旧的@resource.confirmation_token

%p Welcome #{@email}!
%p You can confirm your account email through the link below:
%p= link_to 'Confirm my account', confirmation_url(@resource, confirmation_token: @token)

但是当我点击设计发送的链接时,@token 不会解析为用户的正确确认令牌属性。从日志中:

Started GET "/users/confirmation?confirmation_token=ZEagTsW1o1Ex_xGdQq7D" for 127.0.0.1 at 2014-04-16 12:15:33 -0700
Processing by ConfirmationsController#show as HTML
  Parameters: {"confirmation_token"=>"ZEagTsW1o1Ex_xGdQq7D"}
  User Load (0.3ms)  SELECT `users`.* FROM `users` WHERE `users`.`confirmation_token` = 'd876b3a89e02512b7c8ff632f2d8ff33dbe57ccc4df50469ad99e456c45938f8' ORDER BY `users`.`id` ASC  LIMIT 1

如您所见,电子邮件中发送的@token 解析为 d876b3a89e02512b7c8ff632f2d8ff33dbe57ccc4df50469ad99e456c45938f8 而不是 beaa0ed7c9c2da72a99381ee705aa8ebd91672a5c18f605a44deeb4308d有什么想法吗?

【问题讨论】:

    标签: devise devise-confirmable ruby-on-rails-4.1


    【解决方案1】:

    在我的头撞了一段时间后回答了这个问题。我的用户模型上有一个 after_create 回调,它正在更新用户的属性,这导致 Devise 在发送确认指令电子邮件后在内部重新生成确认令牌,因此电子邮件中的令牌不再是当前的或有效的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-02
      • 2012-06-18
      • 1970-01-01
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      • 1970-01-01
      相关资源
      最近更新 更多