Ruby on Rails 登录后设计代码 [英] Ruby on Rails Devise code after login

查看:18
本文介绍了Ruby on Rails 登录后设计代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个使用 Devise 登录的 RoR 应用程序.创建新用户记录时会执行一些代码,将其作为 after_create 调用/宏/任何内容放入 user.rb 文件中.我需要在每次登录后运行此代码,而不是在创建新用户时运行.

I have an RoR app using Devise for logins. There is some code that is executed when a new User record is created, by being put in the user.rb file as an after_create call/macro/whatever. I need to make this code run after each login, instead of running on new user creation.

通过一些谷歌搜索,似乎一种选择是在 devise.rb 代码中放置 Warden 回调.我的问题是:

With some Googling, it seems that one option is to place Warden callbacks in the devise.rb code. My questions are:

  1. 这是正确的,和/或有更好的方法吗?
  2. 如果这是正确的方法......
    • Warden::Manager... 方法 defs 应该放在 Devise.setup 中的 devise.rb 中,还是在它之后?
    • after_authentication 是我应该使用的回调吗?我只是检查基于用户名的目录是否存在,如果不存在,则创建它.

推荐答案

Just subclass 设计会话控制器 并将您的自定义行为放在那里:

Just subclass Devise's sessions controller and put your custom behaviour there:

# config/routes.rb
devise_for :users, :controllers => { :sessions => "custom_sessions" }

然后像这样创建你的控制器:

And then create your controller like this:

# app/controllers/custom_sessions_controller.rb
class CustomSessionsController < Devise::SessionsController
  ## for rails 5+, use before_action, after_action
  before_filter :before_login, :only => :create
  after_filter :after_login, :only => :create

  def before_login
  end

  def after_login
  end
end

这篇关于Ruby on Rails 登录后设计代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆