Я создаю очень простое приложение в Laravel 5.2, но при использовании действия AuthController
для выхода из системы это просто не работает. У меня есть панель навигации, которая проверяет Auth::check()
и она не изменяется после вызова действия выхода из системы.
У меня есть этот маршрут внутри файла routes.php:
Route::get('users/logout', 'Auth\AuthController@getLogout');
и это вне
Route::group(['middleware' => ['web']], function ()
оператор Route::group(['middleware' => ['web']], function ()
.
Я также попытался добавить следующее действие в конец файла AuthController.php.
public function getLogout() { $this->auth->logout(); Session::flush(); return redirect('/'); }
изpublic function getLogout() { $this->auth->logout(); Session::flush(); return redirect('/'); }
У тебя есть идеи?
ИЗМЕНИТЬ 1
Если я удалю кеш Google Chrome, он работает.
У меня также была аналогичная проблема в Laravel 5.2. Вы должны изменить свой маршрут на
Route::get('auth/logout', 'Auth\AuthController@logout');
или в конструкторе AuthController add
public function __construct() { $this->middleware('guest', ['except' => ['logout', 'getLogout']]); }
Это сработало для меня.
используйте ниже код
Auth::logout();
или
auth()->logout();
Проблема связана с промежуточным ПО «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 просто возвращает метод выхода из системы в реализацию laravel.
В Http->Middleware->Authenticate.php
измените login
в инструкции else в /
return redirect()->guest('/');
и определите следующий маршрут в routes.php
Route::get('/', function () { return view('login'); });
для функции выхода из системы:
public function getlogout(){ \Auth::logout(); return redirect('/home'); }
изpublic function getlogout(){ \Auth::logout(); return redirect('/home'); }
Важно: перенаправить на /home
вместо /
который сначала вызывает $this->middleware('auth');
а затем в промежуточном программном обеспечении перенаправление на /
Это должно быть содержание вашего конструктора в AuthController
$this->middleware('web'); $this->middleware('guest', ['except' => 'logout']);
добавьте эту строку в файл route.php Route :: get ('auth / logout', 'Auth \ AuthController @ getLogout'); и добавьте это, на ваш взгляд, 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(); }
из/** * 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(); }