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