プライベート ベータ版として、選択した一連の個人にアプリケーションを公開したいと考えています。このタスク用にサブドメイン beta.company.com を作成しました。
アプリケーションはワークステーションで期待どおりに動作しますが、サーバーにプッシュすると、アプリケーションは継続的に認証ページに戻ります。参考までに、私は declarative-authorization、authlogic、および Passenger を使用しています。
ルート.rb:
#Application controller
match "/not_authorized", :to => "application#not_authorized", :as => :not_authorized
#UserSessions controller
match "/quit", :to => "user_sessions#destroy", :as => :quit
match "/authenticate", :to => "user_sessions#new", :as => :authenticate
resources :user_sessions, :only => :create
#Users controller
match "/enroll", :to => "users#new", :as => :enroll
# root url
root :to => "users#index"
症状:
- 匿名ルート (例: user_sessions#create、not_authorized) は anon に対して期待どおりに機能します。ユーザー
- アプリケーションはワークステーションで期待どおりに動作します
production.log を見ると、次のようなエントリが表示されます。
UsersController#index による HTML としての処理 許可が拒否されました: # @role_symbols=[:guest]> (役割 [:guest]、特権 [:index、:read、:manage]、コンテキスト :users) のインデックスに一致するルールが見つかりません。http://beta.company.com/authenticateにリダイレクト
** 編集 **
1 つには、UsersController#index アクションがなく、もしあったとしても、匿名ユーザーはそれにアクセスできません。なぜそこにルーティングしようとしているのか(認証が成功した後に行くべき場所であるルートURLではなく)、私は混乱しています。
これはサブドメイン固有のルーティングの問題のようですが、確信が持てません。
この「エラー」をもう一度よく読んでください。UserController#index アクションがあり、匿名ユーザーはそれにアクセスできません。一見、存在しないアクションであるUserSessionController#indexを読んだと思いました。
現在、認証されたユーザーが作成または保存されていないようで、その結果、UserSession#new アクション (AKA 認証パス) に再ルーティングされています。
** / 編集 **
**編集Ⅱ**
私は cookie_store から active_record_store に変更しました:
# cookie store
# MyApp::Application.config.session_store :cookie_store, :key => '_myApp_session'
# active-record store
MyApp::Application.config.session_store :active_record_store
テーブルを追加し ($ rake db:sessions:create)、移行を行い ($ rake db:migrate)、Apache を再起動し ($ touch tmp/restart.txt)、ブラウザのキャッシュをクリアしてから、ブラウザを再起動しました。
セッションはセッション テーブルに正常に追加されましたが、まだ問題が発生します。
** /編集II **
考えは大歓迎です。