req.isAuthenticated () изменяется при перенаправлении? - PullRequest
0 голосов
/ 12 января 2019
  1. Пользователь отправляет вход в данные POST. passport.js аутентифицируется. req.isAuthenticated() равно true.
  2. Перенаправить пользователя на домашнюю страницу от входа в маршрут
    • На маршруте hompage req.isAuthenticated() теперь false.
    • Обновить домашнюю страницу (браузер GET). Теперь домашняя страница req.isAuthenticated() читает true и остается true в последующих запросах до выхода из системы.

Я бы сказал, это происходит примерно в 80% случаев. Остальные 20%, hompage req.isAuthenticated() - это true при перенаправлении и последующих перезагрузках.

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

router.post('/sign_in', (req, res) =>
{
    passport.authenticate
    (
        'local',
        (err, user, info) =>
        {
            if(!err && user)
            {
                req.logIn(user, (err) =>
                {
                    if(!err)
                    {
                        console.log('s', req.isAuthenticated()); // <-- true
                        res.setHeader('Cache-Control', 'no-cache');
                        return res.redirect('/');
                    }
                });
            }
        }
    )(req, res);
}

И:

router.get('/', async (req, res) =>
{
   console.log('h', req.isAuthenticated()); // <-- false ???
   res.send();
}

Если это имеет значение, мои настройки сеанса выглядят так:

app.use
(
    session
    ({
        store             : //...
        secret            : process.env.SESSION_SECRET,
        resave            : false,
        saveUninitialized : true,
        cookie            :
        {
            httpOnly : false,
            secure   : false,
            maxAge   : null
        }
    })
);

Как это можно исправить?

1 Ответ

0 голосов
/ 12 января 2019

Кажется, проблема вызвана ошибкой. См:

Обходной путь - сохранить сеанс перед перенаправлением.

req.session.save(() =>
{
    return res.redirect('/');
});
...