Я создаю очень простое приложение в Laravel 5.2, но при использовании AuthController
действие, чтобы выйти, просто не работает. У меня есть панель навигации, которая проверяет Auth::check()
и он не меняется после вызова действия выхода из системы.
У меня есть этот маршрут в файле rout.php:
Route::get('users/logout', 'Auth\AuthController@getLogout');
и это за пределами
Route::group(['middleware' => ['web']], function ()
заявление.
Я также попытался добавить следующее действие в конец файла AuthController.php.
public function getLogout()
{
$this->auth->logout();
Session::flush();
return redirect('/');
}
Есть ли у вас какие-либо идеи?
РЕДАКТИРОВАТЬ 1
Если я очищаю кеш Google Chrome, он работает.
У меня также была похожая проблема в Laravel 5.2. Вы должны изменить свой маршрут на
Route::get('auth/logout', 'Auth\AuthController@logout');
или в конструктор AuthController добавить
public function __construct()
{
$this->middleware('guest', ['except' => ['logout', 'getLogout']]);
}
Это сработало для меня.
используйте код ниже
Auth::logout();
или же
auth()->logout();
Проблема заключается в «гостевом» промежуточном программном обеспечении в конструкторе AuthController. Это должно быть изменено с $this->middleware('guest', ['except' => 'logout']);
в $this->middleware('guest', ['except' => 'getLogout']);
Если вы проверите файл ядра, то увидите, что ваше гостевое промежуточное ПО указывает на \App\Http\Middleware\RedirectIfAuthenticated::class
Это промежуточное программное обеспечение проверяет, прошел ли пользователь проверку подлинности, и перенаправляет пользователя на корневую страницу, если она прошла проверку подлинности, но позволяет пользователю выполнить действие, если оно не подтверждено. Используя $this->middleware('guest', ['except' => 'getLogout']);
промежуточное программное обеспечение не будет применено при вызове функции getLogout, что позволит аутентифицированным пользователям использовать ее.
N / B: Как и в оригинальном ответе, вы можете изменить getLogout
в logout
поскольку метод getLogout просто возвращает метод выхода из системы в реализации laravel.
В Http->Middleware->Authenticate.php
менять login
в другом заявлении /
return redirect()->guest('/');
и определите следующий маршрут в route.php
Route::get('/', function () {
return view('login');
});
для выхода из системы вызовите следующую функцию:
public function getlogout(){
\Auth::logout();
return redirect('/home');
}
Важный: перенаправить на /home
вместо /
что первые звонки $this->middleware('auth');
а затем в промежуточном программном обеспечении перенаправить на /
Это должно быть содержимое вашего конструктора в AuthController
$this->middleware('web');
$this->middleware('guest', ['except' => 'logout']);
добавьте эту строку в файл rout.php Route :: get (‘auth / logout’, ‘Auth \ AuthController @ getLogout’);
и добавить это на ваш взгляд
a href = «{{url (‘/ auth / logout’)}}»> Выход
Он отлично работает для меня
Просто добавьте маршрут ниже и не добавляйте его в какую-либо группу маршрутов (промежуточное ПО):
Route::get('your-route', 'Auth\AuthController@logout');
Теперь выход из системы должен работать как в L 5.2 без каких-либо изменений в AuthController
,
/**
* Log the user out of the application.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function logout(Request $request)
{
$this->guard()->logout();
$request->session()->flush();
$request->session()->regenerate();
return redirect('/');
}
/**
* Get the guard to be used during authentication.
*
* @return \Illuminate\Contracts\Auth\StatefulGuard
*/
protected function guard()
{
return Auth::guard();
}