[英]Display modal (only 1 time) after first login with Ruby on Rails + Devise
[英]Ruby on Rails Devise code after login
我有一个使用 Devise 进行登录的 RoR 应用程序。 有一些代码在创建新的用户记录时被执行,通过作为 after_create 调用/宏/whatever 放在 user.rb 文件中。 我需要在每次登录后运行此代码,而不是在创建新用户时运行。
通过一些谷歌搜索,似乎一种选择是将 Warden 回调放在 devise.rb 代码中。 我的问题是:
只需继承 Devise 的会话控制器并将您的自定义行为放在那里:
# config/routes.rb
devise_for :users, :controllers => { :sessions => "custom_sessions" }
然后像这样创建你的控制器:
# 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
我发现在登录事件捕获后通过查找“:set_user”:event 完全允许使用 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 成功登录后执行自定义操作吗?
您还可以从设计会话的类继承并使用 after_filter 进行登录。
Warden 现在有内置回调,用于在 after_authentication 上执行您自己的代码:
Warden::Manager.after_authentication do |user, _auth, _opts|
TelegramService.send("#{account.name} just logged in")
end
资料来源: https://github.com/wardencommunity/warden/wiki/Callbacks#after_authentication
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.