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

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

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

相关文章:

javascript - 如何在 Angular js 的选项卡集中的选项卡上启用延迟加载?

javascript - 无法使用 jQuery 将 HTML 代码附加到一个 div

javascript - axios.get 请求返回 GET,HEAD 作为响应

javascript - 将对象保存在模块中并从不同的模块访问它

angularjs - Express 防止 SPA 中的重定向

internet-explorer - IE 的 Express js 重定向

jquery - 如何停止基于出现jquery的多个动画的排队

javascript - 通用 jQuery 回调?

node.js - 启动剑圣时出错

node.js - 当电子邮件或密码为空时, Passport 本地策略不会被调用