Как установить маршрут переадресации laravel 5.3?

Нет ли элегантного решения для перенаправления на определенную страницу после выхода из Laravel 5.3?

Вызываемая функция взята из черты AuthenticatesUsers:

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

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

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

    return redirect('/');
}

Это функция по умолчанию из ядра laravel. Поэтому я должен переопределить всю функцию, я не могу редактировать ядро. Но разве нет более простого решения, потому что похоже на излишнее ручное отключение, сброс и повторную регенерацию.

Разрабатывал ответы в статье: https://codeneverlied.com/how-to-set-logout-redirect-path-in-laravel-5-8-and-before/

Ответ 1

Вот как я это сделал. В Auth\LoginController у вас есть:

use AuthenticatesUsers;

Измените его на:

use AuthenticatesUsers {
    logout as performLogout;
}

Затем определите новый метод logout() в вашем LoginController:

public function logout(Request $request)
{
    $this->performLogout($request);
    return redirect()->route('your_route');
}

Конечно, обычный logout() метод в этом признаке имеет только 3 строки (используется для входа пользователей из системы), поэтому вы можете скопировать их в свой метод, но вы всегда должны следовать принципу DRY (не повторяйте себя ) и повторно использовать как можно больше кода.

Ответ 2

Laravel> 5,7

Принятый ответ в порядке, но вы можете полностью обойти прикосновение к любой логике выхода из системы, просто переписав метод loggedOut:

// App\Http\Controllers\Auth\LoginController.php
protected function loggedOut(Request $request) {
    return redirect('/where/ever/you/want/to/go');
}

Ответ 3

Я бы наследовал LoginController и переопределял функцию logout, исходящую из этой черты:

LoginController.php → оставьте это как есть.

MyLoginController.php

class MyLoginController extends LoginController {

protected $redirectAfterLogout = '/goodbye';

    public function logout(Request $request)
    {
        $this->guard()->logout();
        $request->session()->flush();
        $request->session()->regenerate();
        return redirect($this->redirectAfterLogout);
    }
}

Конечно, вы должны помнить об обновлении своих маршрутов Auth соответственно.

Ответ 4

Я использую Laravel-5.2, что я использовал:

public function logout()
{
    Auth::logout();
    Session::flush();
    return redirect('/');
}

Убедитесь, что вы импортировали:

use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;

В вашем контроллере.

Ответ 5

Метод Auth:: routes в laravel 5.3 регистрирует маршрут POST для /logout вместо маршрута GET. Это не позволяет другим веб-приложениям регистрировать пользователей вне вашего приложения. Чтобы обновить, вы должны либо преобразовать ваши запросы на выход, чтобы использовать глагол POST, либо просто зарегистрировать свой собственный маршрут GET для URI/logout, добавив этот маршрут в файл Routes/web.php: -

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

и он должен работать нормально и перенаправлять вас в каталог "/", как он определен в LoginController.php

Цитата из: -

https://laravel.com/docs/5.3/upgrade

Ответ 6

Каждое действие выхода из системы вызывает событие Events\Logout. Вы можете создать прослушиватель, который прослушивает это событие и добавляет туда некоторую логику. Подробнее о слушателях здесь https://laravel.com/docs/5.3/events

Ответ 7

Самый простой способ - переопределить признак выхода в LoginController в App\Http\Controllers\Auth\LoginController, как этот

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

    return redirect()->route('you_route_name');
}

Ответ 8

Если вы хотите перенаправить, почему бы вам просто не задать перенаправление возврата ('/'); для возврата перенаправления ('yourroute');

Ответ 9

Если вы используете готовое окно AuthController, добавьте эту переменную в верхнюю часть и затем измените строку на перенаправление туда, где вы хотите.

protected $redirectAfterLogout = '/';

Класс AuthenticatesUsers имеет функцию выхода из системы, которая проверяет эту переменную.

public function logout()
{
        Auth::guard($this->getGuard())->logout();

    return redirect(property_exists($this, 'redirectAfterLogout') ? $this->redirectAfterLogout : '/');
}

Ответ 10

Просто используйте это в маршрутах /web.php

Route::get('logout', function (){
Auth::logout();
return redirect('your URL');
});

Ответ 11

Предполагая, что кто-то просматривает его уже несколько дней, и версия используемого ими Laravel - 5.7.

Добавьте эту строку в LoginController.js

public function logout()
{
    Auth::logout();
    return redirect()->to('/your-route');
}

Это предполагает, что вы используете готовый модуль аутентификации, предоставленный laravel

Ответ 12

Чтобы избежать повторения кода выхода и следовать за DRY, вы можете

  • Добавить настраиваемый маршрут выхода в Auth/LoginController, вызвать Auth::logout() и возвратите перенаправление к вашему пути или
  • Добавьте промежуточное ПО (скажем redirectAfterLogout) и добавьте его в маршрут выхода

Ответ 13

Принятый ответ в порядке, но вы можете полностью обойти прикосновение к любой логике выхода из системы, просто переписав метод loggedOut:

protected function loggedOut(Request $request) {
    return redirect('/where/ever/you/want/to/go');
}

Ответ 14

В Laravel 5.8 найдите следующий путь:

App\Http\Контроллеры\Auth\LoginController.php

use Illuminate\Http\Request;*

написать эту функцию

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

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

    return $this->loggedOut($request) ?: redirect('/Where/You/want/to/redirect');;
}

Ответ 15

вы можете перейти на vendor\laravel\framework\src\Illuminate\Foundation\Auth\AuthenticatesUsers.php в функции logout измените return redirect('/'); на ваш адрес маршрута.