Laravel 5 Выход из системы не работает
Когда я использую встроенную аутентификацию и пытаюсь зарегистрировать пользователя в /auth/logout
- это не работает так, как можно надеяться. Похоже, что пользователь вошел в систему. Но когда я очищаю свой кеш браузера, я вижу, что на самом деле он зарегистрировал пользователя.
У меня нет ошибок на странице и ошибок в файле журнала.
Я предполагаю, что Session::flush()
при методе выхода из системы, возможно, решит это, но я не знаю, куда его поместить. Может ли кто-нибудь указать мне в правильном направлении?
Ответы
Ответ 1
Для тех, у кого есть проблемы с его решением с принятым решением: я начал с Laravel 5.1 и обновился до 5.2. Для меня работало следующее исправление:
Попробуйте изменить маршрут выхода на
Route::get('auth/logout', 'Auth\[email protected]');
или в конструкторе AuthController добавьте
public function __construct()
{
$this->middleware('guest', ['except' => ['logout', 'getLogout']]);
}
Взято из: fooobar.com/questions/332666/... (также проверьте другие ответы там, если у вас по-прежнему возникают проблемы)
Ответ 2
Попробуйте это.
Вставить следующий код " класс AuthController расширяет контроллер"
public function getLogout()
{
$this->auth->logout();
Session::flush();
return redirect('/');
}
Ответ 3
У меня была та же проблема.
Проблема была на самом деле простой небольшой ошибкой в конфигурации маршрута и контроллера.
Вы видите, что маршрут на самом деле указывает метод getLogout
, и исключение контроллера ищет logout
.
Единственное, что вам нужно сделать, это изменить исключение в контроллере. Нет необходимости в каких-либо дополнительных методах. Метод getLogout
уже существует и работает отлично.
Вот фактический код
приложение /Http/routes.php
Route::get('auth/logout', 'Auth\[email protected]');
приложение/Http/Контроллеры/Auth/AuthController.php
public function __construct()
{
$this->middleware($this->guestMiddleware(), ['except' => 'logout']);
}
Метод _construct
должен выглядеть так:
public function __construct()
{
$this->middleware($this->guestMiddleware(), ['except' => 'getLogout']);
}
Ответ 4
У меня была та же проблема с обновленным laravel 5.2. Я использовал laravel auth controller, и я решил эту проблему, используя, например,
/logout
вместо /auth/logout
для тех же /register
и /login
вместо /auth/register
и /auth/login
.
Ответ 5
Laravel 5.2 URL немного отличается...
Используйте этот
php artisan make:auth
Это создаст маршруты для auth и некоторые шаблоны для входа e register...
Будьте осторожны, чтобы использовать это с существующими проектами, он может вносить изменения в ваш код
Ответ 6
это происходит, потому что промежуточное программное обеспечение вызывается для каждого маршрута. вы можете добавить исключение в "маршрут выхода" в приложении \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);
}
}
Ответ 7
Не хватает браузеров, которые восстанавливают ваши вкладки после сбоя (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 перенаправляет повторную инициализацию сессии. Поэтому после перенаправления, на вид, reset удалить cookie. Кто-нибудь может прокомментировать это? Это правильная причина, по которой это работает?
Ответ 8
Чтобы вывести пользователя с Laravel с помощью встроенных средств проверки подлинности, это так же просто, как использовать Auth::logout();
.
Пожалуйста, также проверьте различные настройки сеанса в config/session.php
, если сеансы ведут себя непредсказуемо.
Ответ 9
Решение очень простое
в Http- > Middleware- > Authenticate.php измените "login" в инструкции else на "/"
return redirect() → guest ('/');
и определите следующий маршрут в route.php
Route::get('/', function () {
return view('login');
});
для функции выхода из системы: public function getlogout() { \ Auth:: выход из системы(); return redirect ('/home'); }
это важно перенаправить на "/home" вместо "/" , который сначала вызывает $this- > middleware ('auth');
а затем в промежуточном программном обеспечении перенаправить на "/"
Ответ 10
У меня была такая же проблема после обновления до 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\[email protected]
начал нормально работать.
Ответ 11
В 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>
Ответ 12
Это довольно старый поток, но, наконец, я нашел простой трюк для входа пользователя с сервера:
return Auth::logout();