目前,我可以通过 req.authInfo
访问在 done(null, user, {message: 'ok'})
中设置的消息,如下所示:
app.post('/reg', passport.authenticate('local-reg', { session: false }), function (req, res) {
console.log(req.authInfo.message); --> 'ok'
});
这非常有用。
但是我怎样才能以同样的方式访问这样的消息 done(null, false, {message: 'username taken'})
/code> in passport.authenticate 使其抛出 401 unathorised,因此不会转发到路由处理程序本身。
也许我误解了什么?
P.S.:我通过 jQuery.post
发帖。
最佳答案
你应该使用 custom callback您可以访问 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
仅在成功登录后设置。如果您使用的是 session ,则可以使用带有重定向的 Flash 消息,例如:
app.post('/reg', passport.authenticate('local-reg', {
successRedirect: '/',
failureRedirect: '/',
failureFlash: true,
successFlash: true
}));
app.get('/', function(req, res) {
res.json(req.flash());
});
关于jquery - passport.js - 401 错误后访问失败消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29662886/