0

プライベート ベータ版として、選択した一連の個人にアプリケーションを公開したいと考えています。このタスク用にサブドメイン 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 **

考えは大歓迎です。

4

2 に答える 2

0

手始めに…</p>

1つは、UsersController#indexアクションがないことです。アクションがあった場合、匿名ユーザーはそれにアクセスできません。なぜそこにルーティングしようとしているのか(認証が成功した後に行くべきルートURLの代わりに)混乱しています。

ルートURLはUsersController#indexです:

# root url
root :to => "users#index"

ベータドメインにCookieを設定していることを確認してください。(パスだけでなく、user_url(@user)vs user_path(@user))完全なURLを使用するリンクをリダイレクトまたは設定している可能性があります。これにより、ルートドメインに直接向かうことになります。

于 2011-02-09T14:32:33.807 に答える
0

この問題は、コントローラーの SELECT ステートメントに関連していました。SELECT ステートメント "SELECT Users.*" のテーブル名の大文字と小文字の区別が原因で、エラーが発生していました。何らかの理由で、このエラーは production.log ファイルに含まれていませんでした。カピストラーノを使用しないその後の展開では、このエラーを production.log ファイルに含めることができるようにするために何かを行いました (私はまだ何をしているのかわかりません)。

さて、その「何か」が何であるかを判断できれば...

于 2011-02-10T17:47:09.780 に答える