2016-11-03 8 views
1

2つの別々のアプリがあります。ログイン& Dashboardと呼びましょう。どちらのアプリも反応して書かれたUIとエクスプレスサーバーを持っています。Express jsリダイレクトされたCookieが送信されない

私のログインアプリケーションでは、ログインUIからPOSTを実行すると、Login Expressサーバーが認証されて認証されます。認証されると、私はクッキーを設定し、自分のダッシュボードのURLにリダイレクト:

res.cookie(cookie.key, cookie.access_token, { 
     path: '/', 
     domain: cookie.domain, 
     httpOnly: true, 
     maxAge: cookie.rememberExpiry 
    }) 

res.redirect(dashboard_url) 

私は私のダッシュボードアプリでreq.cookiesを使用する場合しかし、私はすべてのクッキーが表示されません。

私は私のログインUIからPOSTを作るとき、私は実際にネットワーク呼び出しを知らせるレスポンスヘッダを参照ください:この瞬間のように時間が2016年11月3日、11:28 GMTであること

Set-Cookie: mycookie=cookievalue; Max-Age=28800; Domain=.local.myurl.com; Path=/; Expires=Thu, 03 Nov 2016 19:20:39 GMT; HttpOnly

注意をそれは期限切れ問題ではない。

テストするにはlogin.local.myurl.com & dashboard.local.myurl.comがlocalhostを指すようにホストファイルを編集しました。

req.cookiesがDashboard Expressアプリケーションで利用できない理由はありますか?

+0

リクエストと一緒に送信されたCookieを確認できますか?クッキーが「通常の」リクエストまたはXHRリクエストに設定されていないリクエストですか? – robertklep

+0

「リクエストで送信されたクッキーを見ることはできますか?」とはどういう意味ですか?ダッシュボードエクスプレスサーバに 'req.cookies'を記録すると何も見えません。 Login ExpressサーバーにPOSTしたときのログインUIで、クロームネットワークのタブに次のようなメッセージが表示されます。応答ヘッダーが設定されたPOST 302が見つかりました –

+0

ネットワークタブで、ダッシュボードからの要求を見て、 'Cookie'ヘッダー(' cookie-parser'ミドルウェアが適切に使用されていないことを除外するため)。 – robertklep

答えて

1

私の問題は2倍でした。

最初にcredentials: 'same-origin'fetchに設定する必要がありました。つまり、私が使用していたリクエストライブラリにCookieを残す必要がありました。

第2に、私のサーバーと私のクライアントは本質的に別々であるため、サーバー上のリダイレクトはクライアントに意図された効果をもたらさなかった。したがって、私はサーバーの応答からちょうどres.redirectできませんでした。代わりにres.redirect行をres.status(200).send()に置き換え、クライアントコードでは単にwindow.location.replace('http://dashboardurl.com')でした。

今後この問題が発生した場合に役立ちます。

関連する問題