Laravel 5 Выход из системы не работает

Когда я использую встроенную аутентификацию и пытаюсь зарегистрировать пользователя в /auth/logout – он не работает так, как надеялся. Похоже, что пользователь вошел в систему. Но когда я очищаю свой кеш браузера, я вижу, что на самом деле он зарегистрировал пользователя.

Я не получаю никаких ошибок на странице и ошибок в файле журнала.

Я предполагаю, что Session::flush() при методе выхода из системы, возможно, решит это, но я не знаю, куда его поместить .. Может ли кто-нибудь указать мне в правильном направлении?

Solutions Collecting From Web of "Laravel 5 Выход из системы не работает"

Для тех, у кого есть проблемы с его решением с принятым решением: я начал с Laravel 5.1 и обновился до 5.2. Для меня работало следующее исправление:

Попробуйте изменить маршрут выхода на

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

или в конструкторе AuthController add

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

Взято из: https://stackoverflow.com/a/34667356/1275778 (также проверьте другие ответы там, если у вас все еще возникают проблемы)

Попробуй это..

Положить в следующий код « класс AuthController расширяет контроллер »

 public function getLogout() { $this->auth->logout(); Session::flush(); return redirect('/'); } из public function getLogout() { $this->auth->logout(); Session::flush(); return redirect('/'); } 

У меня такая же проблема. Проблема была на самом деле простой небольшой ошибкой в ​​конфигурации маршрута и контроллера.

Вы видите, что маршрут фактически указывает метод getLogout и исключение контроллера ищет logout .

Единственное, что вам нужно сделать, это изменить исключение в контроллере. Нет необходимости в каких-либо дополнительных методах. Метод getLogout уже существует и работает отлично.

Вот фактический код

приложение / Http / routes.php

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

приложение / Http / Контроллеры / Auth / AuthController.php

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

Метод _construct должен выглядеть так:

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

У меня была та же проблема с обновленным laravel 5.2. Я использовал контроллер авторизации laravel, и я решил эту проблему, используя,

/logout вместо /auth/logout для /register и /login in вместо использования /auth/register и /auth/login .

Laravel 5.2 URL немного отличается …

Использовать это

 php artisan make:auth 

Это создаст маршруты для auth и некоторые шаблоны для входа e register …

Будьте осторожны, чтобы использовать это с существующими проектами, он может вносить изменения в ваш код

это происходит потому, что промежуточное программное обеспечение вызывается для каждого маршрута. вы можете добавить исключение в «маршрут выхода» в приложении \ Http \ Middleware \ RedirectIfAuthenticated.php

 class RedirectIfAuthenticated { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @param string|null $guard * @return mixed */ public function handle($request, Closure $next, $guard = null) { if (!$request->is('/logout') && Auth::guard($guard)->check()) { return redirect('/home'); } return $next($request); } } 

Недостаточно браузеров, которые восстанавливают ваши вкладки после сбоя ( Chrome не удаляет файлы cookie сеанса ). Кроме того, после перенаправления создается новый сеанс. Решение: в AuthController, как упоминалось выше, в getLogout, установите переменную и передайте ее для перенаправления:

 $data['logout'] = true; return redirect('/')->with('data',$data); 

В своем домашнем виде сделайте следующее:

 @if(session()->has('data') && session('data')['logout']) {{session_unset()}} {{setcookie('laravel_session', "", -1, "/")}} @endif 

Я считаю, что Laravel перенаправляет повторную инициализацию сессии. Поэтому после перенаправления, в поле зрения, сбросьте cookie delete. Кто-нибудь может прокомментировать это? Это правильная причина, по которой это работает?

Чтобы выйти из системы с помощью Laravel с помощью встроенных средств проверки подлинности, это так же просто, как использование Auth::logout(); ,

Также проверьте различные настройки сеанса в config/session.php если сеансы ведут себя непредсказуемо.

Решение очень простое

в 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'); } это важно перенаправить на «/ home» вместо «/», который сначала вызывает $ this-> middleware ('auth'); а затем в промежуточном программном обеспечении перенаправление на «/»

У меня была такая же проблема после обновления до Laravel 5.3. Чтобы исправить это, я заметил, что черты, используемые в

App\Http\Controllers\Auth\AuthController

устарели, поэтому я изменил строку

use AuthenticatesAndRegistersUsers, ThrottlesLogins;

в

use AuthenticatesUsers ;

а также строка в конструкторе

$this->middleware($this->guestMiddleware(), ['except' => 'logout']);

в

$this->middleware('guest', ['except' => ['logout', 'getLogout']]);

Затем метод App\Http\Controllers\Auth\AuthController@logout начал работать правильно.

В 5.4 это сработало для меня …

 <a href="#" onclick="event.preventDefault(); document.getElementById('logout-form').submit();">Logout</a> <form id="logout-form" action="/logout" method="POST" style="display: none;">{{ csrf_field() }}</form> 

Это довольно старый поток, но, наконец, я нашел простой трюк для входа пользователя с сервера:

 return Auth::logout();