passport.js - 401 错误后访问失败消息
passport.js - Access fail message after 401 error
目前,我可以通过 req.authInfo
访问 done(null, user, {message: 'ok'})
中 post 请求中设置的消息,如下所示:
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 unathorised,因此不会转发到路由处理程序本身。
也许我误解了什么?
P.S.: 我正在 post 通过 jQuery.post
.
每个人都有自己的实现方式。在我的实现中,如果没有错误并且登录成功,则:
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
值,我可以用它来传递值和错误消息。
您应该在可以访问 info
的地方使用 custom callback:
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
仅在成功登录后设置。如果您使用的是会话,则可以使用带有重定向的 Flash 消息,例如:
app.post('/reg', passport.authenticate('local-reg', {
successRedirect: '/',
failureRedirect: '/',
failureFlash: true,
successFlash: true
}));
app.get('/', function(req, res) {
res.json(req.flash());
});
目前,我可以通过 req.authInfo
访问 done(null, user, {message: 'ok'})
中 post 请求中设置的消息,如下所示:
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 unathorised,因此不会转发到路由处理程序本身。
也许我误解了什么?
P.S.: 我正在 post 通过 jQuery.post
.
每个人都有自己的实现方式。在我的实现中,如果没有错误并且登录成功,则:
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
值,我可以用它来传递值和错误消息。
您应该在可以访问 info
的地方使用 custom callback:
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
仅在成功登录后设置。如果您使用的是会话,则可以使用带有重定向的 Flash 消息,例如:
app.post('/reg', passport.authenticate('local-reg', {
successRedirect: '/',
failureRedirect: '/',
failureFlash: true,
successFlash: true
}));
app.get('/', function(req, res) {
res.json(req.flash());
});