我正在使用 Rails 教程 3 推出我自己的身份验证系统,并且在我尝试密码重置部分之前它一直有效。当我提交密码重置表单时,会创建一个令牌并将其存储在数据库中reset_password_token
。然后发送一封电子邮件,其中包含指向密码重置表单的链接,如下所示:
<a href="http://localhost:3000/password_resets/$2a$10$UU.bHK5V4o6BFRFPqjtPoOV12aSwq9nvy7OQuxFp.rFjK6lqfJali/edit?email=myemail">Reset password</a>
当我单击链接(或复制/粘贴它,因为它是本地的)时,我收到一个错误:
No route matches [GET] "/password_resets/$2a$10$XAh7yOyphGR84n5fSBUZhuM4WpuyVwLayIZgB0QTTF.q3PgKX9Kz6/edit"
但 rake 路线显示该路线确实存在:
edit_password_reset_path GET /password_resets/:id/edit(.:format) password_resets#edit
我的代码和教程中的代码的唯一区别是我的令牌似乎更长。它大约是 60 个字符,而 Hartl 大约是 22 个字符。此外,当我SecureRandom.urlsafe_base64
在控制台中键入时,我会得到一个 22 个字符的令牌。我不确定为什么它会创建一个更长的,但我也不确定它是否重要。
更新
邮件模板:
To reset your password click the link below:
<%= edit_password_reset_url(@user.reset_password_token, email: @user.email) %>
This link will expire in two hours.
If you did not request your password to be reset, please ignore this email and
your password will stay as it is.