私はRails 4.2.6アプリでDevits 3.5.6を1つのStaffUser
クラスで問題なく使用しました。アプリはstaff.example.com
でアクセスします。Rails/Deviseは未承認と既にサインイン済みの間でバウンスする
今度はclient.example.com
でアクセスする別のアプリへのアクセスを提供するために、第2のClientUser
クラスを作成しました。
両方のユーザークラスには、独自のスコープ付きビューと拡張セッションコントローラがあります(ClientUser
の場合は、使用するレイアウトを上書きするだけです)。
- 要求
/foo
、応答は401権限 です:
- は、フラッシュメッセージ「あなたはすでにサインインしている」と
/foo
に/client_users/session/new
- リダイレクトにリダイレクトし
私がいる問題は、ログインしているClientUser
は、多くの場合、ループ/成功裏に保護されたページがロードされる前に、次のような工程を経て、数回にリダイレクトします
これは、本番環境のほとんどの要求で発生しますが、まれに開発中です。
最初にリクエストされたページで停止する前に、このループが何度も実行されます(ブラウザでChromeの「リダイレクトが多すぎます」という警告が表示されます)。ユーザは再度ログインする機会を得られないため、最初に承認されていなければなりません。
これは影響していないようです。StaffUser
のconfig/routes.rbを
constraints subdomain: 'client' do
devise_for :client_users, controllers: {
sessions: 'devise/client_sessions'
}
resources :client_app_object
end
constraints subdomain: 'staff' do
devise_for :staff_users, controllers: {
sessions: 'devise/staff_sessions'
}
resources :staff_app_object
end
設定/イニシャライザ/ devise.rb
config.scoped_views = true
config.default_scope = :staff_user
config.warden do |manager|
manager.failure_app = CustomFailure
end
LIB /考案/ custom_failure.rb
class CustomFailure < Devise::FailureApp
def redirect_url
if request.subdomain == 'staff'
new_staff_user_session_url(subdomain: request.subdomain)
elsif request.subdomain == 'client'
new_client_user_session_url(subdomain: request.subdomain)
else
# incorrect/missing subdomain
raise CustomFailureException
end
end
...
end
私の作業理論は、DeviseがセッションからClientUser
を取得しようとしていますが、それがStaffUser
であるかのように扱っているため、初期の401 Unauthorizedが発生しています。
ここに競合状態がありますか?
どのユーザークラスをインスタンス化するのかdeviseはどのように知っていますか?
おかげ
編集1 - 設定/初期化子/ session_store.rb
Rails.application.config.session_store :cookie_store, key: '_my_session'
クッキーとサブドメインが複雑ですが、ドメイン間でセッションCookieが失われている可能性がありますか?それを確認してください、私はそれが助けて欲しいです。 – Leito
ありがとう@Leito、私がセッション設定に行った唯一の変更は、名前を変更してすべてのユーザーの再認証を強制することでした。私はルートドメインを指定して、両方のサブドメインで同じCookieが使用されていることを確認し、それが何であるかを確認してください。 – Barry
@Leitoそれはdomain_:allをsession_storeに追加してトリックを行いました。私はそれを受け入れることができるように答えとして書くことを望みますか?ありがとう! – Barry