@PlasterTom

Как использовать passport + ajax?

Я несколько запутался в том, как сделать пост запрос и аутентификацию пользователя с показом сообщений об ошибках.

Мой текущий код:
-роут
router.post('/login', (req, res, next)=>{
passport.authenticate('local', {
    successRedirect : '/admin',
    failureRedirect : '/login',
    failureFlash : true
})(req, res, next);


-стратегия с флэш сообщенями
module.exports = passport => {
passport.use(new LocalStrategy({
    usernameField : 'login'
    },
    (login, password, done) => {
        //match user
        User.findOne({
            login : login
        })
            .then(user => {
                if(!user){
                    return done(null, false, {message : 'no user found'});
                }

                //match passwords
                bcrypt.compare(password, user.password, (err, isMatch)=>{
                    if (err) throw err;
                    if (isMatch) {
                        return done(null, user);
                    } else {
                        return done(null, false, {message : 'password incorrect'});
                    }
                })
            })
            .catch(err => console.log(err));
    }
));

passport.serializeUser(//more code);

passport.deserializeUser(//more code);
});


- аякс
$.ajax({
    type: "POST",
    url: "/login",
    data: formData,
    processData: false,
    contentType: false,
    success : function(data) {
        console.log(data);
    },
})


Перерыл весь стэковерфлоу, в качестве ответа часто встречается xто-то подобное, но у меня все равно не выходит показать ошибки в форме.

app.post('/login', function(req, res, next) {
    passport.authenticate('local', function(error, user, info) {
        if(error) {
            return res.status(500).json(error);
        }
        if(!user) {
            return res.status(401).json(info.message);
        }
        res.json(user);
    })(req, res, next);
});
  • Вопрос задан
  • 233 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы