Rails控制台找不到Devise reset_password_token(正在调试“重置密码令牌无效”)

时间:2018-11-10 04:15:14

标签: ruby-on-rails ruby devise

也许我很累并且缺少一些明显的东西,但是我看到了在Rails 4.1.16,Devise 3.5.10和Ruby 2.3.8上调试“重置密码令牌无效”的最奇怪的事情。

我知道并尝试了解决方法herehere。尝试在控制台中重设重置密码步骤,我想知道我的应用程序是否存在更基本的错误。

我可以运行u.send_reset_password_instructions,它会愉快地创建reset_password_token,将其提交给数据库,并在密码重置电子邮件中发送一个散列版本。

SQL (0.7ms) UPDATE "users" SET "reset_password_sent_at" = ?, "reset_password_token" = ?, "updated_at" = ? WHERE "users"."id" = 8 [["reset_password_sent_at", "2018-11-10 03:35:39.176325"], ["reset_password_token", "a8e9f1dd874735078fc79dbf1a72a5546edf12915eea604bc29e7da897de3c6e"], ["updated_at", "2018-11-10 03:35:39.176799"]]

因此,我们有一个a8e9f1dd874735078fc79dbf1a72a5546edf12915eea604bc29e7da897de3c6e的reset_password_token,Devise已将其散列到NUY_d-cz4GsaCBJz-LPy以便在电子邮件中使用。到目前为止一切都很好。

但是,如果我运行User.with_reset_password_token("NUY_d-cz4GsaCBJz-LPy"),则可以正确解码散列,并且数据库什么也找不到...

User Load (3.3ms) SELECT "users".* FROM "users" WHERE "users"."reset_password_token" = 'a8e9f1dd874735078fc79dbf1a72a5546edf12915eea604bc29e7da897de3c6e' ORDER BY "users"."id" ASC LIMIT 1 => nil

因此,我尝试在控制台中手动搜索完全相同的查询:User.find_by(reset_password_token: "a8e9f1dd874735078fc79dbf1a72a5546edf12915eea604bc29e7da897de3c6e")

我得到了……什么都没了

User Load (4.2ms) SELECT "users".* FROM "users" WHERE "users"."reset_password_token" = 'a8e9f1dd874735078fc79dbf1a72a5546edf12915eea604bc29e7da897de3c6e' LIMIT 1 => nil

我确定这是“重置密码令牌无效”问题的根源,但是我无法弄清楚为什么数据库搜索在这种简单的事情上失败了。有明显的东西我应该检查吗?

0 个答案:

没有答案