【问题标题】:Accessing password reset token Rails 4 and Devise访问密码重置令牌 Rails 4 和设计
【发布时间】:2017-05-09 00:19:35
【问题描述】:

我正在尝试使用 Cucumber 在我的应用程序中测试重置密码功能(设计)。创建用户后,我单击reset password 链接并输入电子邮件地址,然后在我的控制台中我注意到reset_password_token 字段已更新

I, [2016-12-23T09:35:49.937441 #2164]  INFO -- :   Parameters: {"utf8"=>"✓", "user"=>{"email"=>"emailaddress@gmail.com"}, "commit"=>"Send me reset password instructions"}
D, [2016-12-23T09:35:49.939803 #2164] DEBUG -- :   User Load (0.4ms)  SELECT  "users".* FROM "users" WHERE "users"."email" = $1  ORDER BY "users"."id" ASC LIMIT  1  [["email", "emailaddress@gmail.com"]]
D, [2016-12-23T09:35:50.122728 #2164] DEBUG -- :   User Load (0.6ms)  SELECT  "users".* FROM "users" WHERE "users"."reset_password_token" = $1  ORDER BY "users"."id" ASC LIMIT 1  [["reset_password_token", "6e67df7cd7824cf21939a45e9cfe4a399e78216d471432b8b55d7a8cbddc800a"]]
D, [2016-12-23T09:35:50.123615 #2164] DEBUG -- :    (0.1ms)  BEGIN
D, [2016-12-23T09:35:50.125628 #2164] DEBUG -- :   SQL (0.5ms)  UPDATE "users" SET "reset_password_token" = $1, "reset_password_sent_at" = $2, "updated_at" = $3 WHERE "users"."id" = $4  [["reset_password_token", "6e67df7cd7824cf21939a45e9cfe4a399e78216d471432b8b55d7a8cbddc800a"], ["reset_password_sent_at", "2016-12-23 09:35:50.123253"], ["updated_at", "2016-12-23 09:35:50.123915"], ["id", 1]]

作为我的步骤的一部分,然后我获取该令牌并尝试使用它。

Given(/^the user resets their password$/) do
  @user = User.last
  visit edit_user_password_path(reset_password_token: @user.reset_password_token)
  fill_in 'user_password', with: 'NewPassword'
  fill_in 'user_password_confirmation', with: 'NewPassword'
  submit_form
end

虽然我注意到在重置密码电子邮件中

<a href="http://localhost:4000/users/password/edit?reset_password_token=ZUjy2Y3snR3u7diRoAC4">Change my password</a>

这是由

生成的
<%= link_to 'Change my password', edit_password_url(@resource, reset_password_token: @token) %>

如何访问正确的令牌值,以便测试用户密码的重置

谢谢

【问题讨论】:

  • 你的问题不清楚。因此,根据您的示例,您是要通过ZUjy2Y3snR3u7diRoAC4 还是通过6e67df7cd7824cf21939a45e9cfe4a399e78216d471432b8b55d7a8cbddc800a 查找用户?
  • 我要问的是为什么我会得到两个不同的值,我猜我如何通过@resource.token 找到用户
  • @Recklewis 请查看我的回答。

标签: ruby-on-rails ruby ruby-on-rails-4 devise


【解决方案1】:

this commentdevise_invitable gem 也有同样的情况。将原始令牌存储在数据库中不是一个好习惯,而且也不安全。这就是为什么在邮寄原始令牌后,令牌作为计算摘要存储在数据库中。

如果您需要通过邮件中的令牌找到用户,您可以使用

User.find_by_invitation_token('your_token_here')

【讨论】:

  • 感谢您的回答,我现在至少了解whyfind_by_invitation_token 返回 undefined method 错误
  • @Richlewis -- 为什么会这样?如果它很重要,请也分享您的解决方案。它可能会帮助其他人。
猜你喜欢
  • 2023-03-04
  • 1970-01-01
  • 2016-02-22
  • 2020-06-03
  • 2014-01-27
  • 1970-01-01
  • 2015-12-18
  • 2011-08-19
  • 1970-01-01
相关资源
最近更新 更多