0

我正在使用 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.
4

1 回答 1

0

问题是,正如我怀疑与令牌有关。我以前使用设计进行身份验证,由于表命名不一致,邮件程序没有返回令牌,而是返回令牌摘要。一旦邮寄者返回了令牌,该路线就可以正常工作。

于 2015-10-01T17:40:59.280 回答