dma*_*man 8 mongodb node.js express passport.js
使用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);
});
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样写,req.user那就应该是:
auth.route('/auth/facebook/callback')
.get(passport.authenticate('facebook', { failureRedirect: '/login' }),
function(req, res) {
res.redirect('http://localhost:9000/users')
});
Run Code Online (Sandbox Code Playgroud)
如何将其passport.serializeUser调用到调用和user存在的位置,req并且还可以访问mongoDb对象?
rof*_*ggo 20
由于您使用的是自定义身份验证回调,因此您负责建立会话.
请注意,使用自定义回调时,应用程序负责建立会话(通过调用
req.login())并发送响应.
req.login()一旦登录操作完成,就将user对象分配给请求对象.reqreq.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);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2637 次 |
| 最近记录: |