Отправка ответа JSON при сбое аутентификации Passport.js

извините, я очень новичок в node.js, поэтому я еще не успел обдумать это. Я использую Node.js в качестве бэкэнд-сервера API для клиента iPhone. Я использую Passport.js для аутентификации с помощью локальной стратегии. Соответствующий код ниже:

// This is in user.js, my user model
UserSchema.static('authenticate', function(username, password, callback) {
    this.findOne({ username: username }, function(err, user) {
        if (err){
            console.log('findOne error occurred');
            return callback(err);
        }
        if (!user){
            return callback(null, false);
        }
        user.verifyPassword(password, function(err, passwordCorrect){
            if (err){
                console.log('verifyPassword error occurred');
                return callback(err);
            }
            if (!passwordCorrect){
                console.log('Wrong password');
                return callback(err, false);
            }
            console.log('User Found, returning user');
            return callback(null, user);
        });
    });
});

а также

// This is in app.js
app.get('/loginfail', function(req, res){
    res.json(403, {message: 'Invalid username/password'});
});

app.post('/login',
    passport.authenticate('local', { failureRedirect: '/loginfail', failureFlash: false }),
    function(req, res) {
       res.redirect('/');
});

Прямо сейчас мне удалось перенаправить неудачный вход в систему в / loginfail, где я отправил обратно часть JSON клиенту iPhone. Тем не менее, это не имеет достаточной детализации. Я хочу иметь возможность отправлять соответствующие ошибки клиенту iPhone, например: «Пользователь не найден» или «Пароль неверный». С моим существующим кодом я не вижу, как это можно сделать.

Я пытался следовать примерам для пользовательского обратного вызова на сайте passport.js, но я просто не могу заставить его работать из-за отсутствия понимания узла. Как я могу изменить свой код, чтобы иметь возможность отправить файл res.json с соответствующим кодом ошибки / сообщением?

РЕДАКТИРОВАТЬ: я пытаюсь что-то вроде этого сейчас:

// In app.js
app.post('/login', function(req, res, next) {
    passport.authenticate('local', function(err, user, info) {
        if (err) { return next(err) }
        if (!user) {
            console.log(info);
            // *** Display message without using flash option
            // re-render the login form with a message
            return res.redirect('/login');
        }
        console.log('got user');
        return res.json(200, {user_id: user._id});
    })(req, res, next);
});

// In user.js
UserSchema.static('authenticate', function(username, password, callback) {
    this.findOne({ username: username }, function(err, user) {
        if (err){
            console.log('findOne error occurred');
            return callback(err);
        }
        if (!user){
            return callback(null, false);
        }
        user.verifyPassword(password, function(err, passwordCorrect){
            if (err){
                return callback(err);
            }
            if (!passwordCorrect){
                return callback(err, false, {message: 'bad password'});
            }
            console.log('User Found, returning user');
            return callback(null, user);
        });
    });
});

Но вернемся, когда я пытаюсь открыть console.log (info), он просто говорит неопределенный. Я не знаю, как заставить этот пользовательский обратный вызов работать ... Любая помощь будет оценена!

Ответы на вопрос(2)

Ваш ответ на вопрос