Как задать путь перенаправления выхода из системы laravel 5.3?


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

Вызываемая функция исходит из признака Аутентифицирует пользователей:

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

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

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

    return redirect('/');
}

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

Author: Tim van Uum, 2016-09-05

11 answers

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

use AuthenticatesUsers;

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

use AuthenticatesUsers {
    logout as performLogout;
}

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

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

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

 36
Author: Avram, 2016-11-30 12:06:11

Я бы унаследовал 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);
    }
}

Конечно, вы не должны забывать соответствующим образом обновлять свои маршруты аутентификации.

 10
Author: Kaloyan Doichinov, 2016-09-05 10:16:10

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

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

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

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

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

 5
Author: Sachith, 2016-11-30 12:28:37

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

Route::get('/logout', 'Auth\LoginController@logout');

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

Цитируется из:-

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

 3
Author: Mohamed Gabr, 2017-01-20 19:58:46

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

 2
Author: Andrej Ludinovskov, 2016-09-05 10:06:29

Самый простой способ - переопределить признак выхода из системы в 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');
}
 2
Author: ArtemSky, 2016-10-27 13:54:58

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

 1
Author: pseudoanime, 2016-09-05 09:56:57

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

protected $redirectAfterLogout = '/';

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

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

    return redirect(property_exists($this, 'redirectAfterLogout') ? $this->redirectAfterLogout : '/');
}
 1
Author: cyclops1101, 2017-02-02 00:33:48

Просто используйте это в routes/web.php

Route::get('logout', function (){
Auth::logout();
return redirect('your URL');
});
 1
Author: Xander, 2017-07-20 05:42:40

Чтобы избежать повторения кода выхода из системы и следовать СУХОМУ, вы можете

  • Добавьте пользовательский маршрут выхода из системы в Auth/LoginController, вызовите Auth::logout() и верните перенаправление на ваш путь или
  • Добавьте после -промежуточное программное обеспечение (скажем, redirectafterlogout) и добавьте его в маршрут выхода из системы
 0
Author: Aranya Sen, 2017-02-09 06:31:56

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

 -2
Author: z.gomar, 2016-11-24 09:48:57