Подтвердить что ты не робот

Как установить маршрут переадресации 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/

4b9b3361

Ответ 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('/'); на ваш адрес маршрута.