Почему 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
187 +1
0
Ответы
1

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

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

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

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

20 Апр в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 017 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир