Когда я пытаюсь выйти из панели администратора, я получаю сообщение об ошибке:
MethodNotAllowedHttpException in RouteCollection.php line 218:
Но в маршрутизации есть маршрут logout
:
POST | logout | App\Http\Controllers\Auth\LoginController@logout | web
Как я могу это исправить?
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 . , если вы не отправите это, по умолчанию все ваши запросы будут запрещены.
Заменить
<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, и это исправит.
Вы пытаетесь получить доступ к маршруту POST
с помощью GET
.
Вы могли бы:
- создать запрос ajax с помощью POST
- оберните кнопку в POST
- форму
- создать дополнительный GET
- маршрут к App\Http\Controllers\Auth\LoginController@logout
Вы выполняете запрос GET
к маршруту POST
. Создайте или измените существующий маршрут для приема запросов GET
(перенаправление через ссылку - это запрос GET
(большую часть времени))
Если вы обновились до 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>, что-то вроде:
<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>
Просто вы можете добавить это в файл маршрутов:
Route::get('/logout' , 'Auth\LoginController@logout');
Ваш LoginController в папке Auth или в папке Controllers .. Может, вы идете неверным путем .. если LoginController находится в папке Controllers, путь должен быть Route :: get ('logout', 'App \ Http \ Controllers \ LoginController @ logout');
Похожие вопросы
Новые вопросы
laravel
Платформа Laravel — это веб-инфраструктура PHP с открытым исходным кодом, которая позволяет разработчикам создавать динамические и масштабируемые веб-приложения. Исходный код Laravel размещен на GitHub и выпущен под лицензией MIT.