Laravel 5.2: Auth::logout() не работает

Я создаю очень простое приложение в Laravel 5.2, но при использовании действия AuthController для выхода из системы оно просто не работает. У меня есть панель навигации, которая проверяет наличие Auth::check() и не меняется после вызова действия выхода из системы.

У меня есть этот маршрут внутри файла route.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, он работает.


person Felipe Peña    schedule 27.12.2015    source источник
comment
Что значит не работает? Не могли бы вы подробно объяснить, какое действие вы выполняете, а что именно не работает?   -  person Marcin Nabiałek    schedule 27.12.2015
comment
Здравствуйте @MarcinNabiałek. Я отредактировал вопрос. Я надеюсь, что это лучше объяснено.   -  person Felipe Peña    schedule 27.12.2015
comment
Маршрут выхода из системы не должен находиться за пределами группы промежуточного программного обеспечения web. Он должен быть внутри него.   -  person Thomas Kim    schedule 27.12.2015
comment
@ThomasKim все еще не работает   -  person Felipe Peña    schedule 27.12.2015
comment
что делает Auth::logout()? это приносит тот же результат? хотя это должно привести к тому же результату. в любом случае, не могли бы вы опубликовать весь код AuthController?   -  person Bagus Tesa    schedule 28.12.2015
comment
Если кто-то придет сюда в будущем, но все еще не находит радости в ответах: следует ли вам использовать Auth::logout() или auth()-›logout() -- попробуйте запустить session()-›flush AND session()-› сохранить после. Я много раз гуглил, чтобы найти это, и это работает!   -  person Max    schedule 05.05.2020


Ответы (7)


У меня также была аналогичная проблема в Laravel 5.2. Вы должны изменить свой маршрут на

Route::get('auth/logout', 'Auth\AuthController@logout');

или в конструкторе AuthController добавить

public function __construct()
{
    $this->middleware('guest', ['except' => ['logout', 'getLogout']]);
}

Это сработало для меня.

person Aztecnologic    schedule 07.01.2016
comment
Спасибо. Я проверю это позже, и если это сработает, я приму это как ответ. - person Felipe Peña; 08.01.2016
comment
@Aztecnologic Это исправило мою проблему. Не знаю, почему мы должны писать собственный метод выхода из системы в Laravel 5.2 — мне не нужно было в 5.1. Ну что ж. - person tenub; 13.01.2016
comment
Спасибо. Решил и мою проблему. Любое объяснение, почему? Кажется, это связано с обновлением с 5.1 до 5.2 при использовании старого репозитория шаблонов laravel/laravel. - person lorey; 05.03.2016
comment
В дополнение к приведенному выше ответу вы можете настроить перенаправление после выхода из системы, добавив приведенный ниже код в AuthController protected $redirectAfterLogout = 'auth/login'; - person Tayyab Hussain; 26.03.2016
comment
Добавление getLogout к массиву except помогло мне. - person Mouagip; 25.04.2016

используйте приведенный ниже код

Auth::logout();

or

auth()->logout();
person Nimisha Molia    schedule 31.12.2015

Проблема связана с промежуточным программным обеспечением «гость» в конструкторе 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.

person nonybrighto    schedule 10.04.2016

В 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');, а затем в промежуточном программном обеспечении перенаправляет на /

person Hekmat    schedule 09.04.2016

Это должно быть содержимое вашего конструктора в AuthController.

$this->middleware('web');
$this->middleware('guest', ['except' => 'logout']);
person Napoleon256611    schedule 14.01.2016

Просто добавьте маршрут ниже и не добавляйте его ни в какую группу маршрутов (промежуточное ПО):

Route::get('your-route', 'Auth\AuthController@logout');

Теперь выход из системы должен работать как в L 5.2 без каких-либо изменений в AuthController.

person im_tsm    schedule 13.08.2016

добавьте эту строку в routes.php файл Route::get('auth/logout', 'Auth\AuthController@getLogout'); и добавьте это в свой вид <a href="{{ url('/auth/logout') }}" > Logout </a>, у меня это работает нормально

person Nassima Noufail    schedule 12.08.2016