【问题标题】:Rails Tutorial password_reset route not foundRails 教程 password_reset 找不到路由
【发布时间】:2015-09-30 08:16:52
【问题描述】:

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

【问题讨论】:

  • 你能把问题中的邮件模板代码贴出来吗?
  • 一个有趣的事情是两个密码重置链接不同(尤其是重置令牌id 参数)。两个链接来自同一个电子邮件?在您的控制台中,用户的reset_digest(我认为这就是 Hartl 的教程中所说的)的值是多少?

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 2017-08-24
    • 2012-03-17
    • 1970-01-01
    • 2019-12-12
    • 2013-11-02
    • 1970-01-01
    相关资源
    最近更新 更多