estoy respondiendo demasiado tarde, pero Creo que mi solución es mejor y más convencional. En la documentación oficial here. Hay una sección de "Asociación de Compruebe devolución de llamada", en el que se menciona que si establecemos opción passReqToCallback de la estrategia para cierto, esto permite req y se pasa como primer argumento al verificar llamar de vuelta.
Así que mi FacebookStrategy ahora queda como:
var User = require('../models/UserModel.js');
var FacebookStrategy = require('passport-facebook').Strategy;
exports.facebookStrategy = new FacebookStrategy({
clientID: 'REPLACE_IT_WITH_CLIENT_ID',
clientSecret: 'REPLACE_IT_WITH_CLIENT_SECRET',
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);
});
});
}
});
}
);
En mi ejemplo de código que he añadido algo de lógica para guardar la información del usuario en la base de datos y guardar los datos de usuario en sesión. Pensé que podría ser útil para las personas.
req.user proporciona la información del usuario almacenado en la sesión de pasaporte.
Esto también funciona para mí con la autenticación de Facebook. – TulioPa
¡Gracias! Esta fue una gran ayuda. – Tyguy7