tutorial route node another node.js passport.js passport-facebook

node.js - route - npm



Obtener objeto de solicitud en devoluciĆ³n de llamada de estrategia de pasaporte (3)

Así que aquí está mi configuración para la estrategia de pasaporte-facebook:

passport.use(new FacebookStrategy({ clientID: ".....", clientSecret: ".....", callbackURL: "http://localhost:1337/register/facebook/callback", }, facebookVerificationHandler ));

Y aquí está facebookVerificationHandler:

var facebookVerificationHandler = function (accessToken, refreshToken, profile, done) { process.nextTick(function () { ....... }); };

¿Hay alguna manera de acceder al objeto de solicitud en FacebookVerificationHandler?

Los usuarios se registran en mi sitio con LocalStrategy, pero luego podrán agregar sus cuentas sociales y asociarlas a sus cuentas locales. Cuando se llama a la devolución de llamada anterior, el usuario que está conectado actualmente ya está disponible en req.user, así que necesito acceder a req para asociar al usuario con la cuenta de Facebook.

¿Es esta la forma correcta de implementarlo o debería considerar otra forma de hacerlo?

Gracias.



Por esta razón, en lugar de configurar la estrategia cuando se inicia la aplicación, generalmente configuro la estrategia cuando hay una solicitud. por ejemplo:

app.get( ''/facebook/login'' ,passport_setup_strategy() ,passport.authenticate() ,redirect_home() ); var isStrategySetup = false; var passport_setup_strategy = function(){ return function(req, res, next){ if(!isStrategySetup){ passport.use(new FacebookStrategy({ clientID: ".....", clientSecret: ".....", callbackURL: "http://localhost:1337/register/facebook/callback", }, function (accessToken, refreshToken, profile, done) { process.nextTick(function () { // here you can access ''req'' ....... }); } )); isStrategySetup = true; } next(); }; }

Usando esto, tendrá acceso a la solicitud en su controlador de verificación.


Prueba esto.

exports.facebookStrategy = new FacebookStrategy({ clientID: ''.....'', clientSecret: ''...'', callbackURL: ''http://localhost:3000/auth/facebook/callback'', passReqToCallback: true },function(req,accessToken,refreshToken,profile,done){ User.findOne({ ''facebook.id'' : profile.id },function(err,user){ if(err){ done(err); } if(user){ req.login(user,function(err){ if(err){ return next(err); } return done(null,user); }); }else{ var newUser = new User(); newUser.facebook.id = profile.id; newUser.facebook.name = profile.displayName; newUser.facebook.token = profile.token; newUser.save(function(err){ if(err){ throw(err); } req.login(newUser,function(err){ if(err){ return next(err); } return done(null,newUser); }); }); } }); } );

El usuario es un modelo de mangosta, guardo al usuario en DB.