Как выйти из системы и переадресовать ее на страницу входа в систему с помощью Laravel 5.4?

Я использую Laravel 5.4 и пытаюсь внедрить систему аутентификации. Я использовал команду php artisan make: auth для ее настройки. Я отредактировал представления в соответствии с моим расположением. Теперь, когда я пытаюсь выйти из системы, я выбрал эту ошибку

NotFoundHttpException в строке RouteCollection.php 161:

может ли кто-нибудь помочь мне выйти из системы?

Ответ 1

В вашем web.php (маршрутах):

добавить:

Route::get('logout', '\App\Http\Controllers\Auth\[email protected]');

В LoginController.php

добавить:

public function logout(Request $request) {
  Auth::logout();
  return redirect('/login');
}

Кроме того, в верхней части LoginController.php, после namespace

добавить:

use Auth;
use Illuminate\Http\Request;

Теперь вы можете выйти с помощью yourdomain.com/logout URL или если вы создали logout button, добавьте href в /logout

Ответ 2

Ну, даже если то, что предлагает @Tauras, просто работает, я не думаю, что это правильный способ справиться с этим.

Вы сказали, что запустили php artisan make:auth, который также должен был вставить Auth::routes(); в ваши файлы маршрутизации routes/web.php. Который идет с уже заданным маршрутом по умолчанию logout и называется logout.

Вы можете увидеть его здесь на GitHub, но я также сообщу здесь код для простоты:

    /**
     * Register the typical authentication routes for an application.
     *
     * @return void
     */
    public function auth()
    {
        // Authentication Routes...
        $this->get('login', 'Auth\[email protected]')->name('login');
        $this->post('login', 'Auth\[email protected]');
        $this->post('logout', 'Auth\[email protected]')->name('logout');
        // Registration Routes...
        $this->get('register', 'Auth\[email protected]')->name('register');
        $this->post('register', 'Auth\[email protected]');
        // Password Reset Routes...
        $this->get('password/reset', 'Auth\[email protected]')->name('password.request');
        $this->post('password/email', 'Auth\[email protected]')->name('password.email');
        $this->get('password/reset/{token}', 'Auth\[email protected]')->name('password.reset');
        $this->post('password/reset', 'Auth\[email protected]');
    }

Снова обратите внимание, что logout требует POST в качестве метода HTTP-запроса. Для этого есть много веских причин, но стоит упомянуть одну очень важную: таким образом вы можете предотвратить подделку межсайтовых запросов.

Таким образом, согласно тому, что я только что указал, правильный способ реализации этого может быть следующим:

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

И наконец, обратите внимание, что я вставил функцию "готовый" из коробки "{{ csrf_field() }}!

Ответ 3

В контроллере вы можете использовать следующее:

return redirect('login')->with(Auth::logout());

Ответ 4

вот еще один способ сделать это, вызвав Auth:: logout() в маршруте

Route::get('/logout', function(){
   Auth::logout();
   return Redirect::to('login');
});

Ответ 5

В 5.5

добавление

Route::get('logout', 'Auth\[email protected]');

для моего файла маршрутов работает нормально.

Ответ 6

Я рекомендую придерживаться маршрутов аутентификации Laravel в web.php: Auth::routes()

Это создаст следующий маршрут:

POST | logout | App\Http\Controllers\Auth\[email protected]

Вам необходимо выйти из системы, используя форму POST. Таким образом, вам также понадобится токен CSRF, который рекомендуется.

<form method="POST" action="{{ route('logout') }}">
  @csrf
  <button type="submit">Logout</button>
</form>

Ответ 7

Лучший способ для Laravel 5.8

100% работал

Добавьте эту функцию в свой Auth\LoginController.php

use Illuminate\Http\Request;

А также добавьте это

public function logout(Request $request)
{
    $this->guard()->logout();

    $request->session()->invalidate();

    return $this->loggedOut($request) ?: redirect('/login');
}

Ответ 8

Если вы использовали auth scaffolding в 5.5, просто наведите свой href на:

{{ route('logout') }}

Не нужно изменять маршруты или контроллеры.