私の質問は、タイトルが想定しているよりも少し複雑です。
2 つの Rails4 アプリがあります。両方とも、mongoid 経由で同じ mongodb にアクセスします。どちらも認証に devise 3.0.0 を使用し、両方とも devise 対応の同じユーザー モデルを持ち、同じコレクションを使用します。
最初のアプリは、ドメインで API のみを配信します。
api.myapp.com
2 つ目のアプリは、関連する Web サイトを
myapp.com
さらに、以下から JS シングルページ アプリケーションを配信します。
app.myapp.com
後者は問題なく API にアクセスでき、デバイス上で自作のトークン認証パッチを使用して、トークンを HTTP ヘッダーとして転送できるようにします。
どちらの Rails アプリも、次の場所に同じコンテンツがあります。
config/initializers/devise.rb
config/initializers/secret_token
config/initializers/session_store
後者は次のようになります。
Web::Application.config.session_store :cookie_store, key: '_myapp_session', domain: :all
バックボーン ベースの単一ページ アプリケーションで現在行っていることは次のとおりです。
- アプリにログインします
- アプリは API から auth_token を取得します
- アプリはトークンを保存します
- シングル ページ アプリケーションは、トークンを使用していくつかの追加リソースを要求します。
- 応答ヘッダーは Cookie を設定します
Cookie が設定されているので、Rails Web サイトの myapp.com にもログインできると思います。残念!私はそうではありません。
したがって、APIの問題を偽造するために、次のことを行います。
- Chrome で REST クライアントを起動します
- このクライアントを使用して API にログインし、トークンを取得します
- クライアントとトークンを使用して 1 つの追加リソースをリクエストします
- 応答ヘッダーは Cookie を設定します
- Rails の Web サイトにアクセスすると、ログインできました。
私はその行動について混乱しています。リソースが要求され、ユーザーがログインすると、API は正しい Cookie を配信するようです。それ以外の場合、REST クライアントを使用した後、Web サイトにログインできません。
しかし、シングル ページ アプリが REST クライアントとまったく同じように動作し、Cookie を設定する応答ヘッダーも受信する場合、Web サイトにログインしていません。
誰にもヒントはありますか?
よろしくフェリックス