паспорт подтвердить время ожидания - PullRequest
0 голосов
/ 15 мая 2018

Я только начал свое путешествие в Node.js и пытаюсь реализовать идею создания локальной стратегии для входа пользователя.

Я преследовал свои функции и тестировал их.с почтальоном.Теперь моя стратегия аутентификации висит, и я не могу понять, почему.

passport.use(new LocalStrategy(
    function(username, password, done){
        console.log(username) // <-- this doesn't log
        User.findOne({userName: username}, function(err, user){
            if(err) return done(err);
            if(!user){
                return done(null, false, {
                    message: 'Could not login with those details.'
                });
            }
            if(!user.validPassword(password)) {
                return done(null, false, {
                    message: 'Could not login with those details.'
                });
            }
            return done(null, user);
        })   
    }
))

Я сделал действительно элементарный почтовый запрос, который применяет аутентификацию.

app.post('/login', function(req, res){
    console.log(req.body)
    if(!req.body.userName || !req.body.password ) {
        res.status(400),
        res.json({"status" : "fail", "message" : "All fields 
required"});
        return;
    }

    passport.authenticate('local', function(err, User, info){
        let token;

        if(err){
            res.status(400),
            res.json({"status" : "fail", "message" : err});
            return;
        }

        if(User){
            token = User.generateJwt();
            res.status(200);
            res.json({"status" : "success", "token" : token });

        }else{
            res.status(401);
            res.json({"status" : "fail", "message" : info });
        }
    })
}) 

Из чегоЯ вижу, что начальные проверки в порядке с пропущенными полями, но когда он достигает passport.authenticate, он зависает и даже не попадает в мою определенную стратегию.

Я просматривал документацию иЯ уверен, что что-то здесь упускаю, но просто не вижу этого.Если кто-нибудь может указать мне правильное направление, я буду очень признателен.

1 Ответ

0 голосов
/ 15 мая 2018

Вызов passport.authenticate возвращает функцию промежуточного программного обеспечения с подписью (req, res, next). В вашем примере вы используете функцию custom callback , поэтому вам нужно вызвать эту результирующую функцию вручную с соответствующими параметрами в обработчике:

app.post('/login', function(req, res){
    console.log(req.body)
    if(!req.body.userName || !req.body.password ) {
        res.status(400),
        res.json({"status" : "fail", "message" : "All fields 
required"});
        return;
    }

    passport.authenticate('local', function(err, User, info) {
        let token;

        if(err){
            res.status(400),
            res.json({"status" : "fail", "message" : err});
            return;
        }

        if (User) {
            token = User.generateJwt();
            res.status(200);
            res.json({"status" : "success", "token" : token });

        } else{
            res.status(401);
            res.json({"status" : "fail", "message" : info });
        }

    // perform an actual call
    })(req, res);
})

Также имейте в виду, что passport-local ищет поле username по умолчанию, а не userName, как у вас при проверке параметров вашего запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...