passportjs - 如果在401的情况下如何访问状态消息

时间:2015-07-12 12:24:46

标签: node.js passport.js

我使用本地护照的策略:

passport.use(new LocalStrategy(
function(username, password, done) {
    if (username === "myuser" && password === "mypass")
        return done(null, { name: "myuser" });

    return done(null, false, { data: 'Incorrect username and/or password' });
}));

如果是401状态,我希望客户端收到我的状态消息:'用户名和/或密码不正确'。相反,我在回复正文中看到的只是“未经授权”这个词。我该如何访问该消息?

感谢。

3 个答案:

答案 0 :(得分:0)

您可以使用req.authInfo访问要传递的对象作为第三个参数。然后,您可以从中检索data

答案 1 :(得分:0)

问题是:当我接受POST请求时:

app.post('/login', passport.authenticate('local'), function(req, res) {
    console.log(req.authInfo);
    res.send(req.user);
});

如果是401状态,则不会调用console.log(req.authInfo),仅在200的情况下才会调用。如何解决?

答案 2 :(得分:0)

请参阅此帖子的回复:passport.js - Access fail message after 401 error

您必须将passport.authenticate放入功能回复中:

app.post('/login', function(req, res, next) {
    passport.authenticate('local', function(err, user, response) { 
       if(!response.success) {
          res.status(401).json({ 
            message: 'Incorrect username and/or password'
          });
       }
    })(req, res, next);
});

显然你还要将你的本地策略放在第三个参数

if(InvalidPassword or user not exist) {
  return next(null, false, { success: false });
}