MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Passaporto Facebook con JWT

La soluzione migliore che ho trovato per questo problema sarebbe stata reindirizzare alla pagina prevista con un cookie che contiene il JWT.

Usando res.json invierebbe solo una risposta json e non reindirizzerebbe. Ecco perché l'altra risposta suggerita qui non risolverebbe il problema che ho riscontrato.

Quindi la mia soluzione sarebbe:

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
});

Dopo il reindirizzamento, puoi leggere il cookie in modo sicuro e utilizzare quel JWT come previsto. (puoi effettivamente leggere il cookie ad ogni caricamento della pagina, per verificare se un utente è loggato)

Come accennato in precedenza, è possibile reindirizzare con JWT come parametro di query, ma è molto pericoloso. L'utilizzo di un cookie è più sicuro e ci sono ancora soluzioni di sicurezza che puoi utilizzare per renderlo ancora più sicuro, a differenza di un parametro di query che è chiaramente insicuro.