【问题标题】:Devise - forgot password - no route matches [GET] "/users/password"设计 - 忘记密码 - 没有路线匹配 [GET] "/users/password"
【发布时间】:2025-12-24 06:35:10
【问题描述】:

我刚刚通过设计实现了密码重置功能,但是在按照我收到的每封电子邮件的链接并重置我的密码后,我收到以下错误:

没有路由匹配 [GET] "/users/password"(路由错误)

我会假设路由通过设计工作?

我在 routes.rb 中的代码如下所示:

  devise_for :users, controllers: {
           sessions: 'users/sessions',
           passwords: 'users/passwords',
           registrations: 'users/registrations'
         }

我没有在 controllers > users > passwords_controller.rb 下更改任何内容,但如果看到它会有所帮助,它看起来像这样:

class Users::PasswordsController < Devise::PasswordsController
  # GET /resource/password/new
  # def new
  #   super
  # end

  # POST /resource/password
  # def create
  #   super
  # end

  # GET /resource/password/edit?reset_password_token=abcdef
  # def edit
  #   super
  # end

  # PUT /resource/password
  # def update
  #   super
  # end

  # protected

  # def after_resetting_password_path_for(resource)
  #   super(resource)
  # end

  # The path used after sending reset password instructions
  # def after_sending_reset_password_instructions_path_for(resource_name)
  #   super(resource_name)
  # end
end

是我遗漏了什么还是我做错了什么?

当我将“get 'users/password'”添加到 routes.rb 时,出现错误:

找不到用户控制器的操作“密码”(未知操作)

任何帮助将不胜感激!

【问题讨论】:

  • 请不要在您的问题中编辑解决方案。相反,将解决方案作为答案发布在下面。本网站的格式始终是“问题在上,答案在下”。

标签: devise ruby-on-rails-5


【解决方案1】:

我遇到了同样的问题,但找不到任何解决方案。 此错误可能有两个原因

  1. 此页面上没有可用的 rails-ujs(或 jquer-ujs)javascript 文件

  2. 在用户模型中不可恢复

但就我而言,这两个没有问题,并且在错误页面后更改了密码,所以我通过在routes.rb 中添加一行来修复此错误如下:

Rails.application.routes.draw do
  get 'users/password', to: redirect("/")
end

【讨论】:

  • 这个解决方案工作你是对的,并且当用户想要在重定向到用户/密码后重新加载页面时解决问题......我可能会构建一个更好的逻辑,但现在可以完成工作
【解决方案2】:

确保您在用户模型中有recoverable

class User
  devise :database_authenticatable,
         :registerable,
         :validatable,
         :recoverable
end

如果对您没有帮助,请告诉我。

【讨论】:

  • 您能否运行此命令并分享输出。耙路线 | grep users/password 并确保您的密码控制器必须存在于用户目录中。