如何在RAILS中查找devise token auth gem的session/registration控制器?
关于Devise Token Auth自定义Session控制器的解答
1. 默认Session控制器位置
Devise Token Auth gem自带的登录会话控制器是DeviseTokenAuth::SessionsController,源码存放在gem安装目录下的app/controllers/devise_token_auth/sessions_controller.rb路径下,不建议直接修改gem源码,避免后续版本更新覆盖自定义逻辑。
2. 完全支持自定义修改,操作步骤如下
- 第一步:创建自定义的Session控制器,继承gem自带的基础控制器,按需重写对应方法即可,示例路径:
app/controllers/users/sessions_controller.rb
class Users::SessionsController < DeviseTokenAuth::SessionsController # 重写登录对应的create方法(即sign_in逻辑对应的入口) def create # 你可以在这里添加自定义前置逻辑,比如校验用户状态、记录登录日志、统计登录次数等 Rails.logger.info "用户#{params[:email]}尝试登录" # 调用父类原有的登录逻辑,保留devise token auth的默认认证流程 super do |resource| # 这里可以添加登录成功后的后置逻辑,比如更新用户最后登录时间 resource.update(last_login_at: Time.current) if resource.persisted? end end end
- 第二步:修改项目路由配置
config/routes.rb,指定会话控制器使用你自定义的文件
Rails.application.routes.draw do # 其他路由逻辑 mount_devise_token_auth_for 'User', at: 'auth', controllers: { sessions: 'users/sessions' } end
注意事项
- 重写方法时如果需要自定义返回响应,不要遗漏Devise Token Auth要求的认证头字段:
access-token、client、uid,否则前端后续请求会无法通过身份校验。 - 如果需要自定义登出逻辑,可以重写控制器的
destroy方法,操作逻辑和重写登录方法一致。
内容的提问来源于stack exchange,提问作者rjsnavarette
相关产品推荐
相关产品推荐

