私は、バックエンドでノードを使用し、フロントエンドで(ハッシュ履歴で)反応するアプリを持っています。URLフラグメントにリダイレクトすると、Chrome上でセッションがリセットされます(ノード/リアクション/リアクションルータ)
これは私のAPIエンドポイントのURLは次のようになり意味:
https://example.com/api/login
と私は、エンドポイントを反応させるルートからすべての断片である:私がしたい(のOAuth2を介して)でユーザーをログイン後
https://example.com/#/somePage
ユーザーをReact SPA内の特定のURLフラグメントにリダイレクトします。
これを行うための私の最初の考えは、サーバーにURLフラグメントにリダイレクトさせるだけでした。
マイルートハンドラは次のようになります。
これは正常に動作し、SPAから作られた任意のさらなるAPIリクエストが同じreq.sessionを共有し、したがって、トークンを持っていると認証された下流の要求を行うことができます持っているのSafariでapp.get('/oauthCallback', (req, res) => {
req.session.token = 'some token'
redirect('/#/someLoggedInPage')
}
。
しかし、Chromeでは、リダイレクト時に次のAPIリクエストによって新しいセッションが作成されるため、トークンが失われ、認証されたリクエストが成功しなくなります。
他のapiエンドポイント(SPAではなく)にリダイレクトすると、すべて正常に動作します。
SPAのルートである/
にリダイレクトすると機能しません。
クロームがURLの断片とセッションをどのように処理するかわからないことがあるのでしょうか?
これはまた、SPAリクエストが 'fetch'を使用する唯一のものであり、したがってこのオプションを必要とするため、SPAからのリクエストではなく、APiリクエストに対してなぜ機能するのかを説明します –