sto cercando di ottenere il passaporto per funzionare con il mio server express nodo. Posso accedere con Facebook e trovare l'utente corretto nel mio database; tuttavia, quando reindirizzamento req.user
è sempre indefinito. Ecco il mio codice server:req.user undefined - node + express + passport-facebook
Vado su/auth/facebook, trova l'utente corretto e mi reindirizza a /. Ma poi vado a/auth/utente e req.user
non è definita e le mie sessioni di mostrare questo:
cookies: { 'connect.sid': 's:JFdQkihKQQyR4q70q7h2zWFt.VS+te0pT0z/Gtwg7w5B33naCvA/ckKMk60SFenObxUU' },
signedCookies: {},
url: '/auth/user',
method: 'GET',
sessionStore:
{ sessions:
{ '5sk3Txa2vs5sYhvtdYwGaUZx': '{"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"},"passport":{"user":"50c527c9c6cb41860b000001"}}',
'Au6m0hAj/3warKOGNSWw0yu2': '{"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"},"passport":{}}',
JFdQkihKQQyR4q70q7h2zWFt: '{"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"},"passport":{}}' },
generate: [Function],
_events: { disconnect: [Function], connect: [Function] } },
sessionID: 'JFdQkihKQQyR4q70q7h2zWFt',
Ha qualcosa a che fare con il mio sessionID che non corrisponde la sessione in cui si trova l'utente passaporto?
Aggiornamento
Così ho deciso che il sessionID che non corrisponde era perché io corro il mio codice su c9.io ed ha in realtà due URL. Quando uso l'URL corretto e vado a/auth/user il mio sessionID corrisponde alla sessione con set di passaporti utente e posso vedere nel registro il mio deserializeUser che trova l'oggetto utente corretto. Tuttavia, req.user
non è ancora definito dopo questo.
Trying to find user with id: 50c527c9c6cb41860b000001
{ sessions:
{ yoOUOxyXZ0SmutA0t5xUr6nI: '{"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"},"passport":{"user":"50c527c9c6cb41860b000001"}}',
goZpmK3y3tOfn660hRbz2hSa: '{"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"},"passport":{}}',
'O5Sz1GuZqUO8aOw4Vm/hriuC': '{"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"},"passport":{}}' },
generate: [Function],
_events: { disconnect: [Function], connect: [Function] } }
sessionID: yoOUOxyXZ0SmutA0t5xUr6nI
req.user: undefined
{ cookie:
{ path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true },
passport: {} }
Update2
ho capito il problema. E 'stato nella mia funzione user.findByID:
exports.findById = function(id, callback) {
console.log('Trying to find user with id: ' + id);
db.collection('users').findOne({'_id':id}, function(err, user) {
callback(err, user);
});
};
cambiato in:
exports.findById = function(id, callback) {
console.log('Trying to find user with id: ' + id);
db.collection('users').findOne({'_id':new BSON.ObjectID(id)}, function(err, user) {
callback(err, user);
});
};
Un'altra nota: guardatevi ordine di definizione di itinerari espressi - lo fa importa quando si definisce 'app.get' o qualsiasi altro percorso. Poiché è possibile definire il percorso dell'utente prima del middleware del passaporto in modo che in questo modo non ci siano dati dell'utente. (Non è specificamente il tuo caso, ma ha sintomi molto simili). – moka
quindi funziona ora? postarlo come risposta se è così –
Uno strumento utile è quello di copiare e incollare il nodo in JSHint http://www.jshint.com È inoltre possibile eseguire un'attività di tipo Grunt per fare in modo che JSHint guardi il proprio codice. –