2012-06-26 13 views
8

Sto utilizzando passport.js e mi sto ferendo se riesco a collegare un ID di Facebook a un account utente connesso. Qualcosa di simile a questo:Collega i dati di Facebook all'utente attualmente collegato con Passport.js

passport.use(new FacebookStrategy({ 
     consumerKey: --- 
     consumerSecret: --- 
     callbackURL: "http://mycallback" 
    }, 
    function(token, tokenSecret, profile, done) { 
     if (user is logged in) 
      user = User.addfacebookId(user, profile.id) 
      done(user); 
     } 
    } 
)); 

risposta

17

Ci sono alcuni modi per affrontare questo, ma penso che uno dei più straight-forward è quello di utilizzare l'opzione passReqToCallback. Con quello abilitato, req diventa il primo argomento per verificare il callback e da lì è possibile verificare se esiste già req.user, il che significa che l'utente è già connesso. A quel punto, è possibile associare l'utente con i dettagli del profilo di Facebook e fornire la stessa istanza utente al callback fatto. Se req.user non esiste, gestiscilo come al solito.

Ad esempio:

passport.use(new FacebookStrategy({ 
    clientID: --- 
    clientSecret: --- 
    callbackURL: "http://mycallback" 
    passReqToCallback: true 
    }, 
    function(req, accessToken, refreshToken, profile, done) { 
    if (req.user) 
     // user is already logged in. link facebook profile to the user 
     done(req.user); 
    } else { 
     // not logged in. find or create the user based on facebook profile 
    } 
    } 
)); 
+0

che è perfetto Jared grazie ... e grazie per avermi salvato da everyauth :) – Pardoner

+0

vi ringrazio molto, ho avuto anche questo problema. questo passReqToCallback risolve tutto! grazie! – bbnn

+0

Woohooo grazie mille. Funziona: D – Zeck

Problemi correlati