Mit Passport.js schreibe ich die Route auf diese Weise, so habe ich Zugriff auf das MongoDb Dokument userDoc
. Aber wenn es so geht ... passport.serializeUser()
wird nie aufgerufen und das req
Objekt wird user
fehlen.Passport serializeUser() wird nicht mit diesem authenticate() Callback aufgerufen
auth.route('/auth/facebook/callback')
.get(function(req, res, next) {
passport.authenticate('facebook', function(err, userDoc, info) {
if (err) { return next(err); }
// I don't think !userDoc will ever happen because of mongo upsert
if (!userDoc) { return res.redirect('/login'); }
res.cookie('facebookPicUrl', userDoc.value.facebook.picture, {maxAge : 9999999,
httpOnly: false,
secure: false,
signed: false
});
res.redirect('http://localhost:9000/users')
})(req, res, next);
});
Aber wenn ich es auf diese Weise zu schreiben, ist die req.user
dort, wie es sein sollte:
auth.route('/auth/facebook/callback')
.get(passport.authenticate('facebook', { failureRedirect: '/login' }),
function(req, res) {
res.redirect('http://localhost:9000/users')
});
Wie kann ich das machen, wo passport.serializeUser
genannt wird und user
existiert auf req
und ich habe auch Zugang zum mongoDb-Objekt?
Wow! Soweit ich weiß, wurde dies nicht direkt auf der Passport.js-Website dokumentiert. Sie sagen, dass pass.authenticate() req.login() aufruft, aber mir war nicht bewusst, dass sie manuell aufgerufen werden musste, wenn ein benutzerdefinierter Callback bereitgestellt wurde. Die Dokumente sind so vage! – OzzyTheGiant