【问题标题】:Where should warden callbacks be placed in a rails app?守望者回调应该放置在 Rails 应用程序中的什么位置?
【发布时间】:2011-09-11 02:00:56
【问题描述】:

我对 Rails 比较陌生。我已经设置好设计,想在用户登录后运行一些回调代码。

查看Warden wiki page,我可以使用“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 目录中感觉不对。

【问题讨论】:

  • 看起来像一个过滤器,“after_set_user”也就是说,我猜是一个控制器。
  • 其实我在initializers/devise.rb中找到了一个名为“Warden configuration”的部分,所以我猜放置它的正确位置。
  • 你找到把这段代码放在哪里了吗?或者您是否以某种方式使其适应了 Devise 初始化程序的代码风格?
  • 我把它放在 config/initializers/devise.rb 的底部。我认为没有办法使用本机设计代码来做到这一点。在这种情况下,我需要在我的用户模型中执行一些 OAuth 配置文件合并内容,即所谓的方法。
  • @Bero 就像答案一样,在模型代码中。

标签: ruby-on-rails devise warden


【解决方案1】:

当您的应用程序启动时需要使用 Warden 挂钩,因此在 Devise 的初始化程序中 config/initializers/devise.rb 是一个不错的选择。

但是,使用此设计功能可以更好地实现您想要实现的行为:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 2012-03-03
    • 1970-01-01
    相关资源
    最近更新 更多