Я использую фреймворк Laravel 5.4 и пытается внедрить систему проверки подлинности. Я использовал PHP команда ремесленник делает:auth для установки его. Я редактировал мнения по моим макетом. Теперь, когда я пытаюсь выйти, он бросал меня эта ошибка
NotFoundHttpException в соответствии routecollection.php 161:
может ли один помочь мне, как выйти?
В вашем web.php
(стороны):
добавить:
Route::get('logout', '\App\Http\Controllers\Auth\LoginController@logout');
В вашем LoginController.php
добавить:
public function logout(Request $request) {
Auth::logout();
return redirect('/login');
}
Кроме того, в верхней части LoginController.php
после пространства имен
добавить:
use Auth;
Теперь, вы можете выйти через yourdomain.com/logout
URL-адрес или, если вы создали кнопку Выход
, добавьте href в /выход
Ну даже если предположить, что на @Таурас просто работает, я не'т думаю, что это's не правильный путь, чтобы справиться с этим.
Вы сказали, что вы бежать на PHP ремесленника делать:двиг, по которым должны были также вставлены
авт::маршруты();в файлы маршрутизации
routes/web.php`. Который приходит с маршрута уже определены по умолчанию "выход" и называется "выход".
Вы можете увидеть его здесь, на GitHub, но я также буду сообщать код здесь для простоты:
/**
* Register the typical authentication routes for an application.
*
* @return void
*/
public function auth()
{
// Authentication Routes...
$this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
$this->post('login', 'Auth\LoginController@login');
$this->post('logout', 'Auth\LoginController@logout')->name('logout');
// Registration Routes...
$this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
$this->post('register', 'Auth\RegisterController@register');
// Password Reset Routes...
$this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
$this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
$this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
$this->post('password/reset', 'Auth\ResetPasswordController@reset');
}
Тогда еще раз обратите внимание, что "выход" требует пост
как метод HTTP-запроса. Есть много веские причины за этим, но только, чтобы упомянуть один очень важный заключается в том, что таким образом можно предотвратить подделка межсайтовых запросов.
Так, по данным, что я только что указал правильный путь к реализации этого может быть только это:
<a href="{{ route('logout') }}" onclick="event.preventDefault(); document.getElementById('frm-logout').submit();">
Logout
</a>
<form id="frm-logout" action="{{ route('logout') }}" method="POST" style="display: none;">
{{ csrf_field() }}
</form>
Наконец, обратите внимание, что я вставил что Laravel из коробки готовая функция {{ csrf_field() }}
!
Вы можете использовать следующий код в ваш контроллер:
return redirect('login')->with(Auth::logout());
вот еще один способ сделать это путем вызова авт: выхода: () в маршрут
Route::get('/logout', function(){
Auth::logout();
return Redirect::to('login');
});
Лучший способ Для что Laravel 5.8
100% работал
Добавить эту функцию внутри вашего Auth\LoginController.php
use Illuminate\Http\Request;
А также добавить это
public function logout(Request $request)
{
$this->guard()->logout();
$request->session()->invalidate();
return $this->loggedOut($request) ?: redirect('/login');
}
Я рекомендую вам держаться с Laravel auth из стороны в web.php: авт::маршруты()
Это создаст следующему маршруту:
POST | logout | App\Http\Controllers\Auth\LoginController@logout
Вам нужно будет выйти через почтовое форма. Таким образом, вы должны будете также CSRF токен, который рекомендуется.
<form method="POST" action="{{ route('logout') }}">
@csrf
<button type="submit">Logout</button>
</form>
Если вы использовали авт лесов в 5.5 просто направьте свои Солар
в:
{{ route('logout') }}
Нет необходимости изменять какие-либо маршруты или контроллеров.