Когда я пытаюсь выйти из панели администратора, я получаю сообщение об ошибке:

MethodNotAllowedHttpException in RouteCollection.php line 218:

Но в маршрутизации есть маршрут logout:

POST | logout |  App\Http\Controllers\Auth\LoginController@logout | web  

Как я могу это исправить?

2
Babaev 6 Сен 2016 в 10:22

7 ответов

Лучший ответ

Вам необходимо проделать следующие шаги:

1.- если вы работаете с классом, созданным вами для входа в систему, укажите его в config / auth.php:

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Administrator::class,
    ],
],

2.- ваша модель должна наследовать от класса Authenticatable :

use Illuminate\Foundation\Auth\User as Authenticatable;
class Administrator extends Authenticatable{
    #code...
}

3.- добавьте функцию logout () в свой LoginController, импортируйте классы Auth и Redirect

public function logout(){
    Auth::logout();
    return Redirect::to('admin');
}

3.- укажите маршрут, который вы будете использовать для выхода через GET

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

Это все, это должно работать.

ПРИМЕЧАНИЕ. Убедитесь, что вы аутентифицированы функцией Auth::check()

Дополнительная информация. Когда вы работаете с POST-запросами, Laravel необходимо проверить, не является ли запрос вредоносным, для этого Laravel нужен зашифрованный код, он называется csrf_token . , если вы не отправите это, по умолчанию все ваши запросы будут запрещены.

4
maudev 6 Сен 2016 в 08:41

Заменить

<a href="{{ url('/logout') }}" class="btn btn-default btn-flat">{{ trans('adminlte_lang::message.signout') }}</a>

С участием

<a href="{{ url('/logout') }}" class="btn btn-default btn-flat" onclick="event.preventDefault(); document.getElementById('logout-form').submit();"> {{ trans('adminlte_lang::message.signout') }} </a>

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

В mainheader.blade.php, и это исправит.

1
Deepak 12 Окт 2016 в 09:03

Вы пытаетесь получить доступ к маршруту POST с помощью GET.

Вы могли бы:
- создать запрос ajax с помощью POST
- оберните кнопку в POST - форму
- создать дополнительный GET - маршрут к App\Http\Controllers\Auth\LoginController@logout

0
halloei 6 Сен 2016 в 07:26

Вы выполняете запрос GET к маршруту POST. Создайте или измените существующий маршрут для приема запросов GET (перенаправление через ссылку - это запрос GET (большую часть времени))

0
noodles_ftw 6 Сен 2016 в 07:28

Если вы обновились до Laravel 5.3, путь выхода из системы был намеренно удален во время обновления.

POST для выхода

Метод Auth :: routes теперь регистрирует маршрут POST для / logout вместо маршрута GET. Это предотвращает выход пользователей из вашего приложения другими веб-приложениями. Для обновления вы должны либо преобразовать запросы на выход, чтобы использовать команду POST, либо зарегистрировать собственный маршрут GET для URI / logout.

https://laravel.com/docs/5.3/upgrade

Вам нужно изменить ссылки для выхода из системы на формы, чтобы они могли отправлять POST в маршрут. Из https://github.com/acacha/adminlte-laravel/issues/94, что-то вроде:

<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>

Источник

4
Community 20 Июн 2020 в 09:12

Просто вы можете добавить это в файл маршрутов:

Route::get('/logout' , 'Auth\LoginController@logout');
0
HMagdy 3 Окт 2018 в 18:41

Ваш LoginController в папке Auth или в папке Controllers .. Может, вы идете неверным путем .. если LoginController находится в папке Controllers, путь должен быть Route :: get ('logout', 'App \ Http \ Controllers \ LoginController @ logout');

1
Zaki Ahmed 6 Сен 2016 в 08:03