sto rispondendo troppo tardi, ma penso che la mia soluzione sia migliore e più convenzionale. Nella documentazione ufficiale here. C'è una sezione "Association nel Verificare richiamata", in cui si dice che se impostiamo passReqToCallback opzione della strategia per vero, questo permette req e sarà passato come primo argomento per la verifica richiama.
Quindi il mio FacebookStrategy ora assomiglia:
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);
});
});
}
});
}
);
Nel mio esempio di codice ho aggiunto un po 'di logica per salvare le informazioni utente nel DB e il salvataggio dati utente in sessione. Ho pensato che potesse essere utile alle persone.
req.user fornisce le informazioni dell'utente memorizzato nella sessione del passaporto.
Questo funziona anche per me con l'autenticazione di Facebook. – TulioPa
Grazie !! Questo è stato di grande aiuto. – Tyguy7