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