2012-06-26 8 views
8

Estoy usando pasaporte.js y estoy hiriendo si puedo vincular una cuenta de Facebook a la cuenta de un usuario registrado. Algo como esto:Enlace los datos de Facebook con el usuario actualmente conectado 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); 
     } 
    } 
)); 

Respuesta

17

Hay algunas maneras de abordar esto, pero creo que uno de los más directo es utilizar la opción passReqToCallback. Con eso habilitado, req se convierte en el primer argumento para verificar la devolución de llamada, y desde allí puede verificar si existe req.user, lo que significa que el usuario ya inició sesión. En ese punto, puede asociar al usuario con los detalles del perfil de Facebook y el suministro la misma instancia de usuario para la devolución de llamada realizada. Si req.user no existe, solo trátelo como de costumbre.

Por ejemplo:

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

que es perfecto Jared gracias ... y gracias por salvarme de everyauth :) – Pardoner

+0

muchas gracias, yo también tenía este problema. este passReqToCallback resuelve todo! ¡gracias! – bbnn

+0

Woohooo muchas gracias. Está funcionando: D – Zeck

Cuestiones relacionadas