当用户使用错误的凭据进行身份验证时,将返回未授权(而不是我的自定义消息)

时间:2016-12-01 11:30:28

标签: node.js mongodb authentication passport.js

我使用passport.js在我的节点js app登录时验证用户身份。所以我也使用了快速框架和mongo db。

这是我的路线:

router.post('/login',
    passport.authenticate('local'),
    function(req, res, err) {
        var query = {
            'username': req.user.username
        };
        var update = {
            last_login_date: Date.now()
        };
        var options = {
            new: true
        };
        User.findOneAndUpdate(query, update, options, function(err, user) {
            if (err) {
                res.json(err);
            } else {
                res.json('Welcome ' + req.user.username);
            }
        });
    });

这是我的护照代码:

passport.use(new LocalStrategy(
    function(username, password, done) {
        User.getUserByUsername(username, function(err, user) {
            if (err) throw err;
            if (!user) {
                return done(null, false, {
                    message: 'User does not exist'
                });
            }

            User.comparePassword(password, user.password, function(err, isMatch) {
                if (err) throw err;
                if (isMatch) {
                    return done(null, user);
                } else {
                    return done(null, false, {
                        message: 'Invalid password'
                    });
                }
            });
        });
    }));

因此,当用户使用正确的凭据登录时,我会打印出以下内容:

Welcome 'username'

但是,在以下情况中,我的代码不打印自定义消息:

密码用户名响应应该是: INCORRECT CORRECT未经授权的密码无效 CORRECT INCORRECT未授权用户不存在 INCORRECT INCORRECT未授权用户不存在

根据passport.js文件:

  

默认情况下,如果身份验证失败,Passport将以401响应   未经授权的状态,以及任何其他路由处理程序将不会   调用

但是,您可以使用自己的自定义回调消息而不是未经授权的消息,这似乎对我不起作用。

任何帮助将不胜感激!

0 个答案:

没有答案