目前,我可以通过done(null, user, {message: 'ok'})
访问帖子请求中的req.authInfo
内设置的邮件,如下所示:
app.post('/reg', passport.authenticate('local-reg', { session: false }), function (req, res) {
console.log(req.authInfo.message); --> 'ok'
});
哪个非常有用。
但是我怎么能以相同的方式访问像这个done(null, false, {message: 'username taken'})
这样的消息,因为看起来在passport.authenticate中传递done(null, false)
会使它失去401,因此不会转发给路由处理程序本身。
也许我误会了什么?
P.S。:我通过jQuery.post
发帖。
答案 0 :(得分:5)
您应该使用info
来访问app.post('/req', function(req, res, next) {
passport.authenticate('local-reg', {session: false}, function(err, user, info) {
if (err) {
return next(err);
}
if (!user) {
return res.json(info);
}
req.logIn(user, function(err) {
if (err) {
return next(err);
}
return res.json(info);
});
})(req, res, next);
});
:
req.authInfo
成功登录后, app.post('/reg', passport.authenticate('local-reg', {
successRedirect: '/',
failureRedirect: '/',
failureFlash: true,
successFlash: true
}));
app.get('/', function(req, res) {
res.json(req.flash());
});
才会设置。如果您正在使用会话,则可以使用带有重定向的Flash消息,例如:
{{1}}
答案 1 :(得分:1)
每个人都有自己的实施方式。在我的实现中,如果没有错误并且登录成功,那么:
return done(null, {type : true, data: {email: <some email>, role : <some role>, name: <some name>}, token : <some token>});
如果有任何错误或登录失败,那么我会做
return done(null, {type : false, data: 'Email is already taken.'});
或
return done(null,{type:false, data: err})
所以这使我的工作更简单,我只检查type
值,我可以用它来传递值和错误信息。