Ruby on Rails登录后设计代码

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

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

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

只是将Devise的会话控制器子类化并将您的自定义行为放在那里:

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

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

 # app/controllers/custom_sessions_controller.rb class CustomSessionsController < Devise::SessionsController before_filter :before_login, :only => :create after_filter :after_login, :only => :create def before_login end def after_login end end 

我发现在登录事件捕获后通过查找“:set_user”:事件干净地允许使用Devise Warden钩子。

在user.rb中:

 class User < ApplicationRecord Warden::Manager.after_set_user do |user, auth, opts| if (opts[:scope] == :user && opts[:event] == :set_user) # < Do your after login work here > end end end 

我认为这是一个重复的问题。 是的,您可以在每次成功登录后执行代码。您可以在ApplicationController中编写代码。 另请参阅http://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-on-successful-sign-in 。 另外,请查看如何使用rails devise gem成功注册时如何重定向到特定页面? 一些想法。

你可以这样做:

 def after_sign_in_path_for(resource_or_scope) Your Code Here end 

参考我可以在成功使用Devise登录后执行自定义操作吗?

您还可以从设计会话的类inheritance并使用after_filter进行登录。