その問題に対して私が見つけた最善の解決策は、JWTを保持するCookieを使用して予期されたページにリダイレクトすることです。
res.json
を使用する json応答のみを送信し、リダイレクトしません。そのため、ここで提案されている他の回答では、私が遭遇した問題は解決されません。
したがって、私の解決策は次のようになります。
app.get('/auth/facebook/callback',
passport.authenticate('facebook', {
session: false,
successRedirect : '/',
failureRedirect : '/'
}), (req, res) => {
var token = req.user.jwtoken;
res.cookie('auth', token); // Choose whatever name you'd like for that cookie,
res.redirect('http://localhost:3000'); // OR whatever page you want to redirect to with that cookie
});
リダイレクト後、Cookieを安全に読み取り、そのJWTを期待どおりに使用できます。 (実際には、ページが読み込まれるたびにCookieを読み取って、ユーザーがログインしているかどうかを確認できます)
前に述べたように、クエリパラメータとしてJWTを使用してリダイレクトすることは可能ですが、それは非常に安全ではありません.Cookieを使用する方が安全であり、クエリパラメータとは異なり、Cookieをさらに安全にするために使用できるセキュリティソリューションがまだあります。明らかに安全ではありません。