passport.js - 401错误后访问失败消息

时间:2015-04-15 23:41:53

标签: jquery node.js express passport.js http-status-code-401

目前,我可以通过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发帖。

2 个答案:

答案 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值,我可以用它来传递值和错误信息。