3

问题是当用户单击链接以重置其密码(来自电子邮件)时,设计正在检查 reset_password_sent_at 并且在尝试重置(以表单形式)时发生错误:

Reset password token has expired, please request a new one

意思是,“当生成 reset_password_token 时,需要将 @user.reset_password_sent_at 设置为 Time.now,否则当 devise 运行 @user.reset_password_period_valid? 以确定重置令牌是否仍然有效时,它将变为 nil 并假设令牌已过期。”

我不明白的是如何以及在何处将 reset_password_sent_at 分配给 Time.now

我是否需要通过控制台将 Time.now 分配给所有用户?如果是这样,我该怎么做?

或者,是不是我需要将 Time.now 分配给 reset_password_sent_at 的 before_create (或其他东西)?如果是这样,我应该如何以及在哪里执行此操作?

4

1 回答 1

12

您无需担心reset_password_sent_at;当将 reset_password 发送给用户时,这devise将负责正确设置。

reset_password_sent_atreset_password_within与文件中设置的参数一起使用config/initializers/devise.rb。它应该看起来像这样:

config.reset_password_within = 2.hours

很可能它设置为nilor 0,这使得应用程序抛出该password reset token has expired方法。

于 2012-10-26T12:20:43.013 回答