Когда я использую встроенную аутентификацию и пытаюсь зарегистрировать пользователя в /auth/logout
– он не работает так, как надеялся. Похоже, что пользователь вошел в систему. Но когда я очищаю свой кеш браузера, я вижу, что на самом деле он зарегистрировал пользователя.
Я не получаю никаких ошибок на странице и ошибок в файле журнала.
Я предполагаю, что Session::flush()
при методе выхода из системы, возможно, решит это, но я не знаю, куда его поместить .. Может ли кто-нибудь указать мне в правильном направлении?
Для тех, у кого есть проблемы с его решением с принятым решением: я начал с 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
уже существует и работает отлично.
Вот фактический код
Route::get('auth/logout', 'Auth\AuthController@getLogout');
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();