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

Max*_*ari 4 jquery node.js http-status-code-401 express passport.js

目前我可以通过以下方式访问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'         
});
Run Code Online (Sandbox Code Playgroud)

哪个非常有用.
但是我怎样才能done(null, false, {message: 'username taken'})以相同的方式访问这样的消息,因为看来传入done(null, false)passport.authenticate会使401无法通过,因此不会转发到路由处理程序本身.
也许我误会了什么?

PS:我正在发帖jQuery.post.

ves*_*sse 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);
});
Run Code Online (Sandbox Code Playgroud)

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());
});
Run Code Online (Sandbox Code Playgroud)