2016-04-10 17 views
5

passport.js'yi kullanarak, yolu bu yolla yazdım, böylece MongoDb belgesine userDoc erişebilmem için. Ancak, bu şekilde yapılırken ... passport.serializeUser() asla çağrılmayacak ve req nesnesi user eksik olacaktır. Ben öyle yazarsanızPassport serializeUser(), bu authenticate() geri çağırma ile çağrılmıyor

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); 
    }); 

Ama req.user olması gerektiği gibi vardır:

auth.route('/auth/facebook/callback') 
    .get(passport.authenticate('facebook', { failureRedirect: '/login' }), 
     function(req, res) { 
     res.redirect('http://localhost:9000/users') 
    }); 

Ben passport.serializeUser denir yere bu yapıp userreq bulunduğunu ve ben de sahip olabilir nasıl mongoDb nesnesine erişim?

cevap

9

Özel kimlik doğrulama geri aramasını kullandığınızdan, oturumu oluşturmak sizin sorumluluğunuzdadır. Özel bir geri arama kullanılırken, bu ve bir yanıt gönderir (req.login() çağırarak) bir oturumu uygulamanın sorumluluğu haline gelmesi

Not. Oturum işlemi tamamladığında

req.login()req.user olarak istek nesnesine req-user nesneyi atar.

Sen belgelerinde req.login() açıkça özel geri arama denir örneğin görebilirsiniz:

app.get('/login', function(req, res, next) { 
    passport.authenticate('local', function(err, user, info) { 
    if (err) { return next(err); } 
    if (!user) { return res.redirect('/login'); } 
    req.logIn(user, function(err) { 
     if (err) { return next(err); } 
     return res.redirect('/users/' + user.username); 
    }); 
    })(req, res, next); 
}); 
+0

Vay! Anladığım kadarıyla bu, Passport.js web sitesinde doğru bir şekilde belgelenmemişti. Passport.authenticate() ifadesinin req.login() işlevini çağırdığını, ancak özel bir geri bildirim sağlamasının manuel olarak çağrılmasının gerekli olmadığını fark ettiler. Dokümanlar çok belirsiz! – OzzyTheGiant

İlgili konular