Почему cookie неактивно вовремя подачи моего запроса? Отправка запроса:(function(){

$('body').on('click', '.enter', function() {

var username = $('.login').val(),
password = $('.password').val();

var data ={
'username': username,
'password': password
};

$.ajax({
type: "POST",
url: 'login',
data: data,
success: window.location.href = 'main'
});

});

})();
Мой файл 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?

21 Авг 2019 в 07:08
211 +1
0
Ответы
1

Это происходит потому, что JavaScript код выполняется асинхронно, что означает, что код может завершиться до того, как запрос AJAX будет выполнен и куки будут установлены. В вашем случае, когда пользователь попадает на страницу /main, проверка куки происходит до того, как куки будут установлены после успешного входа.

Чтобы решить эту проблему, вы можете перенаправить пользователя на страницу /main только после успешного ответа от сервера, включая установку куки. Таким образом, измените свой код на что-то подобное:

$.ajax({
type: "POST",
url: 'login',
data: data,
success: function() {
window.location.href = 'main';
}
});

Это гарантирует, что пользователь будет перенаправлен на страницу /main только после успешного входа и установки куки.

20 Апр 2024 в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир