warden回调应该放在rails应用程序中的哪个位置?

我对铁路比较陌生。 我有Devise设置,并希望在用户登录后运行一些回调代码。

查看Warden wiki页面 ,我可以使用“after_set_user”回调来执行此逻辑,例如:

Warden::Manager.after_set_user do |user, auth, opts| unless user.active? auth.logout throw(:warden, :message => "User not active") end end 

但是,我不确定我应该在哪里存储这些东西。 我的第一个想法是我可以把它放在config / initializers / devise.rb中。 那是对的吗? 在config目录中放置本质上是控制器代码的感觉并不正确。

应用程序启动时需要使用Warden挂钩,因此在config / initializers / devise.rb中的Devise初始化程序中是一个很好的候选者。

但是,使用此Devisefunction可以更好地完成您想要实现的行为:

https://github.com/plataformatec/devise/wiki/How-To:-Customize-user-account-status-validation-when-logging-in