2

Acts_as_tenantgemは本当にうまく機能します。複数のテナントのデータの保存と取得に問題はありません。ただし、サブドメインなしで開発サイトにアクセスすると、問題が発生しました。

問題:サブドメインを指定しない場合でも、どのテナントのユーザーもログインできます。

例-cheese.lvh.me:3000のユーザーは、bacon.lvh.me:3000にログインしてデータにアクセスすることはできません(その逆も同様です)。ただし、チーズとベーコンの両方のユーザーはlvh.me:3000にログインできます。ログインすると、テナントスコープは適用されなくなるため、すべての新しい挿入はNULLのaccount_idを取得します。

私がしたい:サブドメインが指定されていない場合、ユーザーのログインを防止します。

人気のあるrailstutorial.orgのM.Hartlのユーザーログイン方法を使用しています。

def create
  user = User.find_by_email(params[:session][:email].downcase)
  if user && user.authenticate(params[:session][:password]) 
    sign_in user
    flash[:success] = "Welcome user!"
    redirect_to users_path
  else
    flash.now[:error] = 'Invalid email/password combination'
    render 'new'
  end
end

アドバイスをいただければ幸いです。

4

1 に答える 1

2

私が考えることができる最も簡単な方法は、サブドメインなしでアクセスしたくないルートをサブドメイン制約にラップすることです。

constraints(SubdomainRequired) do
  # routes go here
end

この定数は、アプリケーションのディレクトリ内で、クラス( )にちなんで名付けられたファイルでSubdomainRequired定義するのが最適だと思います。lib/constraintslib/constraints/subdomain_required.rb

class SubdomainRequired
  def self.matches?(request)
    request.subdomain.present?
  end
end

次に、ルートファイルの先頭にこの制約を要求するだけです。

require 'constraints/subdomain_required'

サブドメインがこれとともに存在する場合、ルートが見つかります。リクエストがサブドメインで行われていない場合、それは見つかりません。

于 2012-11-04T10:30:49.820 に答える