Najlepszym rozwiązaniem tego problemu, jakie znalazłem, byłoby przekierowanie do oczekiwanej strony z plikiem cookie zawierającym token JWT.
Korzystanie z pliku res.json
wyśle tylko odpowiedź json i nie przekieruje. Dlatego druga sugerowana odpowiedź tutaj nie rozwiąże napotkanego przeze mnie problemu.
Więc moim rozwiązaniem byłoby:
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
});
Po przekierowaniu możesz bezpiecznie odczytać plik cookie i użyć tego tokena JWT zgodnie z oczekiwaniami. (możesz faktycznie odczytać plik cookie przy każdym załadowaniu strony, aby sprawdzić, czy użytkownik jest zalogowany)
Jak wspomniałem wcześniej, możliwe jest przekierowanie z JWT jako parametrem zapytania, ale jest to bardzo niebezpieczne. Korzystanie z pliku cookie jest bezpieczniejsze i nadal istnieją rozwiązania zabezpieczające, których można użyć, aby uczynić go jeszcze bezpieczniejszym, w przeciwieństwie do parametru zapytania, który jest po prostu niezabezpieczone.