![](/img/trans.png)
[英]Rails+Devise password reset token expires before the configured time period
[英]Rails+Devise “Reset password token is invalid”—but the token matches the db token…?
在尝试重置密码时,我的(自定义)邮件程序具有以下行:
edit_user_password_url(@user, reset_password_token: @user.reset_password_token)
并创建一个像这样的链接:
http://fixit-rails.dev//users/password/edit.6?reset_password_token=13f76244d39b0dfb9746674058a45559280358b99c1fdc36c6b9af2de2ba6376
在数据库中,用户具有以下reset_password_token
:
13f76244d39b0dfb9746674058a45559280358b99c1fdc36c6b9af2de2ba6376
用户可以成功进入新密码屏幕,但是当他单击“提交”时,错误消息将显示"Reset password token is invalid"
为什么设计无法识别令牌?
更新
我使用以下代码创建令牌:
def generate_reset_password_token
raw, enc = Devise.token_generator.generate(User, :reset_password_token)
self.reset_password_token = enc
self.reset_password_sent_at = Time.now.utc
self.save(validate: false)
end
我找到了解决方案!
edit_user_password_url(@user, reset_password_token: @user.reset_password_token)
相反,应为:
edit_user_password_url(@user, reset_password_token: @token)
您可能会问@token
是什么? 这是raw
的:
def generate_reset_password_token
raw, enc = Devise.token_generator.generate(User, :reset_password_token)
self.reset_password_token = enc
self.reset_password_sent_at = Time.now.utc
self.save(validate: false)
end
在Devise中,它是自动设置的,但是如果您要做自己的事情,则需要保存raw
并将@token
设置为邮件中的raw
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.