过滤能够使用Devise登录的用户

tri*_*anm 7 ruby-on-rails devise

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

是否有一种直接的方式来扩展Devise的身份验证查找器,以便它不包括已删除的经销商的用户?也许在User上使用命名范围?

干杯

特里斯坦

tri*_*anm 16

事实证明我需要做的就是覆盖我的用户模型的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
Run Code Online (Sandbox Code Playgroud)
  1. 通过调用super以正常方式查找用户.
  2. 我正在使用STI,所以我检查用户是DealershipUser,然后检查经销商是否被删除(acts_as_paranoid).
  3. 返回用户.

对于我的场景,这是一个非常具体的解决方案,但您可以覆盖find_for_authentication,但是如果您愿意,之后您将返回用户.