})(); Мой файл login.js который обрабатывает все это:connection.query('SELECT password FROM `users` WHERE login = "' + username +'"', function(err, rows, fields) { if (err) throw err; else if (rows.length > 0 && password == rows[0].password) { console.log('Hello'); res.cookie('cookie', 'superseecret', { maxAge: 43200, httpOnly: true, signed: true }) res.end(); } else { console.log('Go away!'); res.end(); } }); И тут я рендерю новою страницу после того, как срабатывает колбек у клиента:router.get('/main', function(req, res) { if (req.signedCookies.cookie == 'superseecret') { res.render('main', { asd:seecretData }); } else { res.send('Go away!'); } }); Но когда пользователь попадает на /main там он видит Go away!, хотя куки в браузере есть. Если обновить страницу то все нормально. Насколько я понял - обработка /main начинается быстрее чем записывается куки. Но как такое возможно, если я перенаправляю на /main после того как мне приходить колбек succsess?
Это происходит потому, что JavaScript код выполняется асинхронно, что означает, что код может завершиться до того, как запрос AJAX будет выполнен и куки будут установлены. В вашем случае, когда пользователь попадает на страницу /main, проверка куки происходит до того, как куки будут установлены после успешного входа.
Чтобы решить эту проблему, вы можете перенаправить пользователя на страницу /main только после успешного ответа от сервера, включая установку куки. Таким образом, измените свой код на что-то подобное:
Это происходит потому, что JavaScript код выполняется асинхронно, что означает, что код может завершиться до того, как запрос AJAX будет выполнен и куки будут установлены. В вашем случае, когда пользователь попадает на страницу /main, проверка куки происходит до того, как куки будут установлены после успешного входа.
Чтобы решить эту проблему, вы можете перенаправить пользователя на страницу /main только после успешного ответа от сервера, включая установку куки. Таким образом, измените свой код на что-то подобное:
$.ajax({type: "POST",
url: 'login',
data: data,
success: function() {
window.location.href = 'main';
}
});
Это гарантирует, что пользователь будет перенаправлен на страницу /main только после успешного входа и установки куки.