2017-07-29 7 views
1

セッションクッキーを自分の環境で動作させることを切望していますが、これまでのところ運がありません。セッションクッキーはCORS環境では送信されません

const corsOptions = { 
    origin: "http://127.0.0.1:4300", 
    allowedHeaders: [ "Origin", "X-Requested-With", "Content-Type", "Accept", "Authorization", "x-xsrf-token" ], 
    credentials: true 
}; 
if (isDebug) { 
    corsOptions.maxAge = 1; 
} 
app.use(cors(corsOptions)); 

私は、ログイン用の急行・セッションとパスポートを使用しています:

私のバックエンドは、CORSが、このように有効になっているポート3000で実行し、ノード/急行アプリケーションです。セッションは、このように構成されています

const options = { 
    secret: '...', 
    cookie: { httpOnly: true } 
}; 

app.use(session(options)); 

フロントエンドは、私は私の特急サーバーからフロントエンドを提供していたときすべてが期待どおりに動作しますが、ポート4300で実行されている、角度2 SPAです。しかし、そうでない場合、私は次のわかりにくい問題を経験しています。

ログインルートはセッションIDを持つクッキーを返します。しかし、バックエンドへの次のリクエストは異なるセッションIDで送信されますか?この別のセッションIDがどこから来るのかわかりません。特に、セッションクッキーはHTTP専用としてマークされているためです。次のように

HTTP-リクエストが送信されます。

const response = this.http.get(url, { withCredentials: true }); 

は、私は次のことを試してみました:

  • は、サードパーティのCookieがブラウザで許可されていることを確認しました=>それは大丈夫でした。
  • httpOnlyをfalse => no nouckに設定しようとしました。
  • Cookieドメインで実験:バックエンドのアドレスに設定してください。その後、フロントエンドのアドレスに - どちらも動作しませんでした。
  • ブラウザとCookieのキャッシュをクリアし、Google ChromeとEdgeを試しました。何も助けなかった。

パズルのどの部分が欠落していると思いますか?

どうもありがとう、 スティーブン

答えて

0

OMGが、私はそれを絞り込ん、最終的に問題を見つけた:

ログイン要求ががwithCredentialsフラッグが設定されていませんでした...私は思いましたこれは、クッキーが既に受信された後の後続の要求に対してのみ必要となることを意味する。しかし、実際には、クロスドメインで受信されたCookieを保存することがあります。

関連する問題