如何处理护照身份验证响应并将其显示给用户

时间:2015-01-07 10:12:03

标签: node.js express passport.js

我使用护照本地策略验证我的 nodeJs 应用。一切都很好。但是,如何向用户显示他已输入无效登录凭据的相应消息。我目前的代码只是在屏幕上发送 401未经授权的错误

这是我的代码

passport.use(new LocalStrategy(function(username, password, callback) {
    User.findOne({
        username : username
    }, function(err, user) {
        if (err) {
            return callback(err);
        }

        // No user found with that username
        if (!user) {
            return callback(null, false);
        }

        // Make sure the password is correct
        user.verifyPassword(password, function(err, isMatch) {
            if (err) {
                return callback(err);
            }

            // Password did not match
            if (!isMatch) {
                return callback(null, false);
            }

            // Success
            return callback(null, user);
        });
    });
}));

exports.isLocalAuthenticated = passport.authenticate('local', {
    session : true
});

router.post('/', authController.isLocalAuthenticated, function(req, res) {
    //here I want to show the error message to user

});

1 个答案:

答案 0 :(得分:1)

documentation已在自定义回调部分清楚地描述了您的案例。

您需要添加以下自定义回调:

exports.isLocalAuthenticated = function(req, res, next) {
    passport.authenticate('local', function(err, user, info) {
        if (err) { return next(err); } //error exception

        // user will be set to false, if not authenticated
        if (!user) {
            res.status(401).json(info); //info contains the error message
        } else {
            // if user authenticated maintain the session
            req.logIn(user, function() {
                // do whatever here on successful login
            })
        }    
    })(req, res, next);
}

您不需要指定后一个回调。