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