ruby-on-rails - 过滤能够使用 Devise 登录的用户

标签 ruby-on-rails devise

我有一个使用 Devise 进行身份验证的 Rails 应用程序。用户属于经销商,我想阻止属于残疾经销商的用户能够登录。

有没有直接的方法可以到 扩展设计的身份验证查找器 以便它不包括来自已删除经销商的用户?也许在用户上使用命名范围?

干杯

特里斯坦

最佳答案

原来我需要做的就是覆盖我的用户模型的 find_for_authentication 方法:

class User < ActiveRecord::Base
  ...

  # Intercept Devise to check if DealershipUser's Dealership is active
  def self.find_for_authentication(conditions)
    user = super
    return nil if user.is_a?(DealershipUser) && user.dealership.deleted?
    user
  end

  ...
end
  • 通过调用 super 以正常方式查找用户。
  • 我正在使用 STI,所以我检查用户是否是 DealershipUser,然后检查经销商是否被删除 (acts_as_paranoid)。
  • 返回用户。

  • 对于我的场景,这是一个非常具体的解决方案,但您可以覆盖 find_for_authentication 无论如何您喜欢,前提是您之后返回用户。

    关于ruby-on-rails - 过滤能够使用 Devise 登录的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4141094/

    相关文章:

    ruby-on-rails - Rails_admin 中的管理员和用户模型重定向错误

    ruby-on-rails - 在 Devise 中为用户手动登录时,如何将记住我设置为是?

    ruby-on-rails - Ruby on Rails : bad username/password?(535 验证失败)

    ruby-on-rails - Rails 3.1.1 测试 :benchmark on Ruby 1. 9.3

    ruby-on-rails - 不建议使用“ActiveRecord::Core::ClassMethods.find”调用

    ruby-on-rails - Rails UJS - 解除绑定(bind)事件处理程序

    ruby-on-rails - Rails + 设计 : Redirect to User resource

    ruby-on-rails - Rails 4 - 设计 Omniauth 并允许单个用户使用多种社交媒体策略进行身份验证

    ruby-on-rails - Rails Devise 发送邮件

    ruby-on-rails - 在 routes.rb 中使用带有正斜杠的字符串作为单个参数