Rails教程找不到password_reset路由

时间:2015-09-30 08:16:52

标签: ruby-on-rails ruby authentication reset-password

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

1 个答案:

答案 0 :(得分:0)

问题是,我怀疑这个令牌。我之前使用过devise进行身份验证,并且由于表命名不一致,邮件程序没有返回令牌而是令牌摘要。一旦邮件程序返回令牌,路由就可以正常工作。