@matros97

Ошибка марширута logout?

Привет, сделал кнопку выход с админки вот код:

<li><a href="{{ route('logout') }}"><i class="fa fa-sign-out"></i> <span>Выход</span></a></li>


при клике на ссылку вылетает такая ошибка

5ca4e9ac1da90001295579.png

Использую стандартный метод аутентификации
  • Вопрос задан
  • 155 просмотров
Пригласить эксперта
Ответы на вопрос 3
JhaoDa
@JhaoDa
LaravelRUS Team
А что мешает посмотреть список роутов (php artisan ro:li) и увидеть, какой метод на самом деле ожидает logout?
Ответ написан
s_panteleev
@s_panteleev
25 yo, Yaroslavl
У вас же в тексте ошибки все написано)
как уже выше написали в php artisan ro:li написано, что от вас ожидают POST запрос, а вы GET'ом выйти пытаетесь
Ответ написан
crashxd
@crashxd
Backend разработчик
Сейчас ваш роут logout генерируются стандартным Auth::routes();
Он по умолчанию описан через метод POST.
Можно убрать Auth::routes(); и определить свои маршруты для авторизации/регистрации/сброса_пароля/выхода.

А можешь просто добавить свой роут, без удаления стандартного. Например я добавляю такой:
Route::get('logout', 'Auth\LoginController@logout')->name('logout');
Он работает через GET, но ссылаться на ту же самую функцию, что и нативный (т.е. переписывать функции или добавлять контроллеры не нужно).

Другой вариант: использовать стандартный маршрут, который работает через POST.
Для этого нужно будет изменить вашу кнопку выхода.
Примерно так:
<form id="logout" action="{{ route('logout') }}" method="POST" style="display:none;">
    @csrf
</form>
<li>
    <button type="submit" form="logout">
        <i class="fa fa-sign-out"></i> <span>Выход</span>
    </button>
</li>
Если не хочешь button, можешь повешать javascript событие на свою ссылку:
<form id="logout" action="{{ route('logout') }}" method="POST" style="display:none;">
    @csrf
</form>
<li>
    <a  href="{{ route('logout') }}"
        onclick="event.preventDefault(); document.getElementById('logout').submit();">
            <i class="fa fa-sign-out"></i><span>Выход</span>
    </a>
</li>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы