Passport serializeUser() 未使用此 authenticate() 回调调用
Passport serializeUser() is not called with this authenticate() callback
使用passport.js,我这样写路由所以我可以访问MongoDb文档userDoc
。但是,当这样做时...... passport.serializeUser()
将永远不会被调用并且 req
对象将丢失 user
.
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);
});
但如果我这样写,req.user
应该是:
auth.route('/auth/facebook/callback')
.get(passport.authenticate('facebook', { failureRedirect: '/login' }),
function(req, res) {
res.redirect('http://localhost:9000/users')
});
我怎样才能做到这一点 passport.serializeUser
被调用并且 user
存在于 req
上并且我还可以访问 mongoDb 对象?
由于您使用的是自定义身份验证回调,因此您负责建立会话。
Note that when using a custom callback, it becomes the application's
responsibility to establish a session (by calling req.login()
) and
send a response.
一旦登录操作完成,req.login()
将 user
对象分配给请求对象 req
作为 req.user
。
例如,您可以在文档中看到 req.login()
在自定义回调中被显式调用:
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);
});
使用passport.js,我这样写路由所以我可以访问MongoDb文档userDoc
。但是,当这样做时...... passport.serializeUser()
将永远不会被调用并且 req
对象将丢失 user
.
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);
});
但如果我这样写,req.user
应该是:
auth.route('/auth/facebook/callback')
.get(passport.authenticate('facebook', { failureRedirect: '/login' }),
function(req, res) {
res.redirect('http://localhost:9000/users')
});
我怎样才能做到这一点 passport.serializeUser
被调用并且 user
存在于 req
上并且我还可以访问 mongoDb 对象?
由于您使用的是自定义身份验证回调,因此您负责建立会话。
一旦登录操作完成,Note that when using a custom callback, it becomes the application's responsibility to establish a session (by calling
req.login()
) and send a response.
req.login()
将 user
对象分配给请求对象 req
作为 req.user
。
例如,您可以在文档中看到 req.login()
在自定义回调中被显式调用:
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);
});