Выход, или Logout (очистка сессий) в Laravel 5.3

Авторизация Запросы Маршрутизация Настройка

Автор: ACym.ru - November 16, 2016 10:41 am

Как сделать выход (Logout),- в Laravel 5.3 не работает

В версии 5.3 фрэймворка Laravel для доступа к методу logout отвечающего за маршрутизацию контроллера используется метод POST, а не GET, как ранее.

Сделано это для предотвращения самопроизвольных "выбрасываний" из приложения.

Однако, в результате этих изменений, перестал работать использовавшийся ранее маршрут http://сайт/logout.

И вообще, как теперь завершить сеанс работающего с приложением пользователя?

Теоретически, передавая запрос типа POST.

То есть нельзя просто ставить в макет ссылку, чтобы выйти из приложения. Обязательно нужно делать это через форму.

В коде самого Отвела встречается такой фрагмент:

<a href="{{ url('/logout') }}"
   onclick="event.preventDefault();
      document.getElementById('logout-form').submit();">
   Logout
</a>

   <form id="logout-form" action="{{ url('/logout') }}" method="POST" style="display: none;">
      {{ csrf_field() }}
   </form>

Как видим, в маршрутизатор передается запрос, использующий метод POST.

Вся авторизация в файле маршрутизатора \routes\web.php теперь обрабатывается одной строкой Auth::routes();.

Сюда входит и вход в приложение, и регистрация, и смена пароля, и выход.

И запрос из приведенного выше примера тоже обрабатывается этой директивой.

А нельзя ли попроще?

Можно.

Для этого нужно просто добавить маршрут к методу Logout, который теперь находится в контроле LoginController, а не AuthController как раньше.

То есть дописываем в маршрутизатов \routes\web.php еще одну отдельную строку для выхода из приложения:

Route::get('logout','Auth\LoginController@logout');

Теперь разбирать авторизацию в маршрутизаторе будут 2 строки:

Auth::routes();
Route::get('logout','Auth\LoginController@logout');

Как видим, обращение к методу logout контроллера происходит через метод GET, который можно спокойно передать в http запросе, т.е. через обычную ссылку.

Теперь обращение к адресу http://сайт/logout приведет к выходу из системы, и стиранию сессии пользователя.

Желаю всем удачных разработок, и приглашаю читать материалы сайта Laranotes.ru, и публиковать свои "фишки" по работе с фрэймворком Laravel.

Ваш Андрей Кимвр