Здравствуйте. Все те же проблемы с авторизацией, но вопрос уже другой, поэтому создаю его в отдельной теме. Итак, проблема:
Создаю форму авторизации посредством AJAX - это не форма в терминах HTML, она не отправляется кнопкой "Submit", но AJAX делает некоторый запрос к серверу, сервер, в свою очередь, проверяет правильность введенных данных, и, если все введено правильно, вызывает код авторизации пользователя:
$result = \Auth::attempt([
'username' => $login,
'password' => $password
], $remember);
И возвращает некоторый результат браузеру. Как мы уже
видели раньше, в этой ситуации сервер создает сессию, но после перезагрузки страницы сессия почему-то удаляется.
Интересно, что если после вышеприведенного кода вызвать функцию перенаправления, то сессия создастся правильно:
if ($result) return redirect()->intended('/');
Перенаправлять, при этом, можно куда угодно. Только появляется другая проблема. AJAX-запрос должен возвращать браузеру некоторый результат своей работы, чтобы, в случае удачного входа, браузер перезагружал страницу. Если скрипт, вызванный браузером, перенаправляется на другую страницу, то ответа браузер не получает, вместо чего получает сообщение о 302-перенаправлении в вызванном скрипте.
Если отлавливать это сообщение (302) и обновлять страницу в браузере при его получении, то страница обновится быстро, и сервер еще не успеет обработать перенаправления в своем скрипте, в результате чего на экране будет все та же кнопка входа, и только после еще одной перезагрузки страницы мы увидим надпись "Вы вошли".
Обновлять в браузере страницу с некоторой задержкой боюсь, так как это решение видится нестабильным - могут быть ситуации, когда сервер все равно не успеет обработать перенаправление до обновления страницы браузером.
В результате, вопрос: что такое делает сервер перед своей перезагрузкой, что позволяет ему сохранить сессию (почему она не сохраняется функцией "attempt", и требуется обязательная перезагрузка) и можно ли эти действия вызвать внутри вызываемого при помощи AJAX скрипта?