who*_*gnu 9 ruby-on-rails devise warden
我有一个使用Devise进行登录的RoR应用程序.创建新用户记录时会执行一些代码,方法是将user.rb文件作为after_create调用/ macro/whatever放入.我需要在每次登录后运行此代码,而不是在新用户创建时运行.
通过一些谷歌搜索,似乎有一个选项是在devise.rb代码中放置Warden回调.我的问题是:
Ash*_*aka 20
只是将Devise的会话控制器子类化并将您的自定义行为放在那里:
# config/routes.rb
devise_for :users, :controllers => { :sessions => "custom_sessions" }
Run Code Online (Sandbox Code Playgroud)
然后像这样创建你的控制器:
# 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
Run Code Online (Sandbox Code Playgroud)
小智 6
我发现在登录事件捕获后通过查找":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
Run Code Online (Sandbox Code Playgroud)
我认为这是一个重复的问题。是的,您可以在每次成功登录后执行代码。您可以在 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
Run Code Online (Sandbox Code Playgroud)
您还可以继承 devise session 的类并使用 after_filter 进行登录。
| 归档时间: |
|
| 查看次数: |
11560 次 |
| 最近记录: |