Rails设计方法find_for_authentication未被调用

时间:2013-08-30 11:43:57

标签: ruby-on-rails authentication methods devise call

我有一个多租户应用程序,每个用户可以在不同的子域中拥有不同的角色。有UserRight表,它连接租户,用户和角色。为了找出用户是否在特定租户/子域中注册(如果UserRights中有一行加入用户和租户就有注册),我已经覆盖了self.find_for_authentication方法。它看起来像这样:

def self.find_for_authentication(warden_conditions)
    p "DEBUG"
    if user = User.find_by_email(warden_conditions[:email])
      t = Tenant.find_by_subdomain(warden_conditions[:subdomain])
      for_auth = UserRight.find(:first, :conditions => ["user_id = :u and tenant_id = :t", {:u => user, :t => t}])
      return for_auth.user if !for_auth.nil?
    end
  end

我将Apartment用于多个数据库,并使用Devise进行身份验证(如果这很重要)。 问题是,当我在子域中时,会调用此方法(find_for_authentication),但是当我在主域(没有子域)时,则在登录时根本不会调用此方法。因此,登录表单只是说错误的电子邮件或密码。

我无法通过设计找到调用find_for_authentication的位置。

1 个答案:

答案 0 :(得分:1)

方法名称应为 def self.find_first_by_auth_conditions(warden_conditions)