Редактировать:
Я просто попробовал следующий синтаксис req.logIn(user, { session: false }, function(err) {
и отключил взаимодействие сеанса. Кажется, это работает так, поэтому проблема связана с этой конкретной частью.
Я использую Passport с локальной стратегией, связанной с MySQL, и все в порядке, пока я проверяю данные из БД.
app.post('/login', function(req, res, next) {
passport.authenticate('local-login', function(err, user, message) {
if (req.isAuthenticated()) {
return res.redirect('/');
}
if (err) {
return next(err);
}
if (!user) {
return res.redirect('/login');
}
let username = user.username;
req.session.username = username;
req.session.email = user.email;
req.session.verified = user.verified;
req.session.connected = true;
req.logIn(user, function(err) {
if (err) { return next(err); }
return res.redirect('/someURL');
});
})(req, res, next);
});
Однако шаг req.logIn
не работает, он меняет URL, но страница никогда не отображается, и я должен остановить свой сервер, чтобы разблокировать мою страницу. Если я удалю функцию req.logIn
, у меня не возникнет никаких проблем, и мое перенаправление выполнит эту работу.
Если я напишу свое перенаправление сразу после этой функции (с оператором await
), оно все равно не будет работать. Я предполагаю, что logIn
выполняет некоторую фоновую операцию, такую как сохранение информации о пользователях в сеансе, но я не могу понять, в чем дело, поскольку я не вижу никаких ошибок в консоли, в то время как Chrome не возвращает никакого ответа.