Laravel 5.2: Auth:: logout() не работает
Я создаю очень простое приложение в Laravel 5.2, но при использовании AuthController
действия для выхода из системы это просто не работает. У меня есть панель навигации, которая проверяет наличие Auth::check()
и не изменяется после вызова действия выхода из системы.
У меня есть этот маршрут внутри файла routes.php:
Route::get('users/logout', 'Auth\[email protected]');
а вне
Route::group(['middleware' => ['web']], function ()
.
Я также попытался добавить следующее действие в конец файла AuthController.php.
public function getLogout()
{
$this->auth->logout();
Session::flush();
return redirect('/');
}
Есть ли у вас идеи?
РЕДАКТИРОВАТЬ 1
Если я очистил кэш Google Chrome, он работает.
Ответы
Ответ 1
У меня также была аналогичная проблема в Laravel 5.2. Вы должны изменить маршрут на
Route::get('auth/logout', 'Auth\[email protected]');
или в конструкторе AuthController добавьте
public function __construct()
{
$this->middleware('guest', ['except' => ['logout', 'getLogout']]);
}
Это сработало для меня.
Ответ 2
используйте ниже код
Auth::logout();
или
auth()->logout();
Ответ 3
Проблема заключается в промежуточном программном обеспечении "guest" в конструкторе 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 просто возвращает метод выхода в larvel-реализацию.
Ответ 4
В Http->Middleware->Authenticate.php
измените login
в инструкции else на /
return redirect()->guest('/');
и определите следующий маршрут в route.php
Route::get('/', function () {
return view('login');
});
для следующей функции выхода:
public function getlogout(){
\Auth::logout();
return redirect('/home');
}
Важно: перенаправить на /home
вместо /
, который сначала вызывает $this->middleware('auth');
, а затем перенаправляет промежуточное ПО на /
Ответ 5
Это должно быть содержимое вашего конструктора в AuthController
$this->middleware('web');
$this->middleware('guest', ['except' => 'logout']);
Ответ 6
добавьте эту строку в файл routes.php
Route::get('auth/logout', 'Auth\[email protected]');
и добавьте это, по вашему мнению, <a href="{{ url('/auth/logout') }}" > Logout </a>
у меня все работает нормально
Ответ 7
Просто добавьте ниже маршрут и не добавляйте его внутри любой группы маршрутов (промежуточное ПО):
Route::get('your-route', 'Auth\[email protected]');
Теперь logout должен работать так, как в L 5.2, без изменения чего-либо в AuthController
.
Ответ 8
/**
* 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();
}