Sử dụng passport.js, tôi viết lộ trình theo cách này để tôi có quyền truy cập vào tài liệu MongoDb userDoc
. Nhưng, khi làm theo cách này ... passport.serializeUser()
sẽ không bao giờ được gọi và đối tượng req
sẽ bị thiếu user
.Hộ chiếu serializeUser() không được gọi với xác thực này() gọi lại
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);
});
Nhưng nếu tôi viết nó theo cách này, các req.user
là có như nó phải được:
auth.route('/auth/facebook/callback')
.get(passport.authenticate('facebook', { failureRedirect: '/login' }),
function(req, res) {
res.redirect('http://localhost:9000/users')
});
Làm thế nào tôi có thể làm cho này đến nơi passport.serializeUser
được gọi và user
tồn tại trên req
và tôi cũng có truy cập đối tượng mongoDb?
Wow! Theo tôi hiểu, điều này không được ghi chép ngay trên trang web Passport.js. Họ nói rằng passport.authenticate() gọi req.login() nhưng tôi không biết rằng nó phải được gọi thủ công nếu cung cấp một cuộc gọi lại tùy chỉnh. Các tài liệu rất mơ hồ! – OzzyTheGiant