Rails无法覆盖Devise Passwords Controller,密码路由缺失
解决Devise密码路由缺失问题
以下是排查和修复的具体步骤:
1. 确认User模型包含:recoverable模块
Devise的密码重置相关路由完全依赖模型中的:recoverable模块,如果你的User模型没添加这个模块,Devise不会生成任何密码相关路由。检查app/models/user.rb,确保配置包含:recoverable:
class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, # 必须添加这个模块 :rememberable, :validatable end
2. 修正控制器文件路径
你的控制器类是User::PasswordsController(单数命名空间),对应的文件路径应该是app/controllers/user/passwords_controller.rb,而不是你当前的users/passwords_controller.rb(复数目录)。Rails自动加载规则是:命名空间User::对应单数目录user/,如果目录名是复数users/,Rails无法正确识别控制器,会导致路由无法绑定,进而不生成对应路由。
3. 清除路由缓存并重启服务
修改路由和控制器后可能存在缓存问题,执行以下命令清除路由缓存:
rails routes:clear
然后重启Rails服务器,再执行rails routes查看是否生成了密码路由。
4. 排查路由冲突
确认你的devise_for配置没有添加skip: [:passwords]这类跳过密码路由的设置,当前路由配置看起来无问题,但要确保没有其他代码覆盖或修改了Devise的默认路由规则。
完成以上步骤后,应该能看到类似如下的密码相关路由:
new_user_password GET /users/password/new(.:format) user/passwords#new edit_user_password GET /users/password/edit(.:format) user/passwords#edit user_password PATCH /users/password(.:format) user/passwords#update PUT /users/password(.:format) user/passwords#update POST /users/password(.:format) user/passwords#create
内容的提问来源于stack exchange,提问作者Anon
相关产品推荐
相关产品推荐

