我有一个多租户应用程序,每个用户可以在不同的子域中拥有不同的角色。有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的位置。
答案 0 :(得分:1)
方法名称应为
def self.find_first_by_auth_conditions(warden_conditions)