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();
}