1

我有一个多租户应用程序,其中每个用户都可以在不同的子域中拥有不同的角色。有一个表 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 的位置。

4

1 回答 1

2

方法名应该是 def self.find_first_by_auth_conditions(warden_conditions)

于 2013-08-30T11:58:38.763 回答