繁体   English   中英

Rails + Devise“重置密码令牌无效”,但是该令牌与数据库令牌匹配…?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM