Obtener objeto de solicitud en callback de estrategia de pasaporte

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 forma 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 callback 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 debo considerar otra forma de hacerlo?

Gracias.

Por este motivo, en lugar de configurar la estrategia cuando se inicia la aplicación, normalmente la configuro 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.

Hay una opción passReqToCallback , consulte la parte inferior de esta página para obtener más información: http://passportjs.org/guide/authorize/

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 mongoose, guardo al usuario en DB.