【问题标题】:Rails devise method find_for_authentication not being calledRails 设计方法 find_for_authentication 未被调用
【发布时间】:2013-09-03 03:17:51
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我尝试过这种方式,但它再次只从子域调用,而不是从主域调用。如果有帮助,我的用户模型是 :database_authenticable。
    猜你喜欢
    • 2014-03-04
    • 1970-01-01
    • 2020-02-25
    • 2012-10-16
    • 2021-08-12
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多