A melhor solução que encontrei para esse problema seria redirecionar para a página esperada com um cookie que contém o JWT.
Usando
res.json
enviaria apenas uma resposta json e não redirecionaria. É por isso que a outra resposta sugerida aqui não resolveria o problema que encontrei. Então minha solução seria:
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
});
Após o redirecionamento, você pode ler o cookie com segurança e usar esse JWT conforme o esperado. (você pode realmente ler o cookie em cada carregamento de página, para verificar se um usuário está logado)
Como mencionei anteriormente, é possível redirecionar com o JWT como parâmetro de consulta, mas é muito inseguro. Usar um cookie é mais seguro, e ainda existem soluções de segurança que você pode usar para torná-lo ainda mais seguro, ao contrário de um parâmetro de consulta que é claramente inseguro.