Экспресс и запрос на паспорт не закрываются / не завершаются - PullRequest
0 голосов
/ 30 декабря 2018

Я пытаюсь добавить аутентификацию в мое экспресс-приложение, используя passport, passport-local и passport-jwt.Это то, что у меня есть для кода входа в систему, я зарегистрировал вывод сгенерированного токена и пытаюсь отправить его обратно через объект ответа, но когда я пытаюсь войти в систему с помощью почтальона, запрос никогда не завершается.

passport.use('login', localStrategyLogin);
passport.serializeUser(function (user, done) {
    done(null, user._id)
});

app.use(passport.initialize());
app.post('/login', (req, res, next) => {
    passport.authenticate('login', {session: false}, (err, user, info) => {
        if (err) {
            return next(err);
        }
        if (!user) {
            return next(new Error("Could not find user"));
        }

        req.login(user, {session: false}, (error) => {
            if (error) return next(error);

            const token = jwt.sign({_id: user._id, email: user.email}, JWT_SECRET, {expiresIn: JWT_EXPIRES});
            res.send({token});
        });
    })(req, res, next);
});

Стратегия входа:

import { Strategy as LocalStrategy } from 'passport-local';
import User from "../models/User";

export const localStrategyLogin = new LocalStrategy({usernameField: 'email', passwordField: 'password'}, async function (email, password, done) {
try {
    const user = await User.findByLogin({email, password});
    if (user) return done(null, user);
} catch (e) {
    console.log(e.message);
}

return done(null, false, {message: 'Incorrect email or password.'});
});

1 Ответ

0 голосов
/ 30 декабря 2018

Проблема в том, что вы используете next вместо отправки ответа обратно.

return next(err);

Next используется для передачи управления следующей функции промежуточного программного обеспечения.Если нет, то запрос будет оставлен висеть или открыт.

измените его на

return res.status(500).send(err);

...