larravel 5.3 로그아웃 리디렉션 경로를 설정하는 방법은 무엇입니까?
Laravel 5.3에서 로그아웃한 후 특정 페이지로 리디렉션할 수 있는 우아한 솔루션은 없습니까?
호출되는 기능은 Authentication Users: 특성에서 가져온 것입니다.
public function logout(Request $request)
{
$this->guard()->logout();
$request->session()->flush();
$request->session()->regenerate();
return redirect('/');
}
이것은 라라벨의 핵심에서 기본 기능입니다.그래서 나는 코어를 편집할 수 없는 전체 기능을 무시해야 합니다.하지만 수동으로 로그아웃하고 플러시한 후 다시 재생성하는 것은 오버킬처럼 느껴지기 때문에 더 간단한 해결책은 없을까요?
기사에서 답을 찾아냈습니다: https://codeneverlied.com/how-to-set-logout-redirect-path-in-laravel-5-8-and-before/
이렇게 했어요.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 원칙(반복하지 않음)을 따르고 코드를 가능한 한 많이 다시 사용해야 합니다.
라라벨 > 5.7
승인된 답변은 괜찮지만, 로그아웃 논리를 완전히 무시할 수 있습니다.loggedOut
방법:
// App\Http\Controllers\Auth\LoginController.php
protected function loggedOut(Request $request) {
return redirect('/where/ever/you/want/to/go');
}
나는 상속할 것입니다.LoginController
그리고 그것을 무시합니다.logout
그 안의 특성에서 오는 기능:
LoginController.php -> 그대로 둡니다.
내 로그인 컨트롤러.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);
}
}
물론 인증 경로를 그에 맞게 업데이트해야 합니다.
Laravel-5.2를 사용하고 있는데, 제가 사용한 것은 다음과 같습니다.
public function logout()
{
Auth::logout();
Session::flush();
return redirect('/');
}
다음 항목을 가져오셨는지 확인합니다.
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
조종기에.
누군가가 그것을 매일 보고 있고 그들이 사용하고 있는 라벨의 버전이 5.7이라고 가정합니다.
LoginController.php에 이 행 추가
public function logout()
{
Auth::logout();
return redirect()->to('/your-route');
}
이는 Larravel이 제공하는 Out of Box 인증 모듈을 사용하고 있다고 가정합니다.
laravel 5.3의 Auth::routes 메서드는 GET 경로 대신 /logout에 대한 POST 경로를 등록합니다.이렇게 하면 다른 웹 응용프로그램이 사용자의 응용프로그램에서 로그아웃할 수 없습니다.업그레이드하려면 POST 동사를 사용하도록 로그아웃 요청을 변환하거나 Routes/web.php:- 파일에 이 경로를 추가하여 /logout URI에 대한 고유 GET 경로를 등록해야 합니다.
Route::get('/logout', 'Auth\LoginController@logout');
그리고 LoginController.php에 정의된 대로 '/' 디렉토리로 리디렉션할 수 있습니다.
인용:-
https://laravel.com/docs/5.3/upgrade
가장 간단한 방법은 로그아웃 특성을 무시하는 것입니다.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');
}
routes/web.php에서 사용하기만 하면 됩니다.
Route::get('logout', function (){
Auth::logout();
return redirect('your URL');
});
모든 로그아웃 작업은 이벤트를 발생시킵니다.Events\Logout
. 이 이벤트를 수신하는 수신기를 만들고 거기에 논리를 추가할 수 있습니다.청취자에 대한 자세한 내용은 여기 https://laravel.com/docs/5.3/events 에서 확인할 수 있습니다.
AuthController의 기본 설정을 사용하는 경우 이 변수를 맨 위에 추가한 다음 문자열을 변경하여 원하는 곳으로 리디렉션합니다.
protected $redirectAfterLogout = '/';
AuthenticationsUsers 클래스에는 이 변수를 확인하는 로그아웃 기능이 있습니다.
public function logout()
{
Auth::guard($this->getGuard())->logout();
return redirect(property_exists($this, 'redirectAfterLogout') ? $this->redirectAfterLogout : '/');
}
로그아웃 코드를 반복하지 않고 DRY를 따르려면 다음을 수행할 수 있습니다.
- Auth/LoginController에서 사용자 지정 로그아웃 경로 추가, 호출
Auth::logout()
경로로 리디렉션하거나, - 애프터 미들웨어(RedirectAfterLogout이라고 함)를 추가하여 로그아웃 경로에 추가합니다.
승인된 답변은 괜찮지만, 로그아웃 논리를 완전히 우회하여 로그아웃된 내용을 덮어쓸 수 있습니다.아웃 메소드:
protected function loggedOut(Request $request) {
return redirect('/where/ever/you/want/to/go');
}
Laravel 5.8에서 다음 경로를 찾습니다.
앱\Http\Controller\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');;
}
Illuminate Support package: LoginController.php의 로그아웃 메서드를 재정의합니다.
use Illuminate\Support\Facades\Auth;
public function logout()
{
Auth::logout();
return redirect('/wherever/you/want');
}
Authenticated Users 특성(laravel 7의 벤더/laravel/ui/auth-backend/Authenticated Users)에서 Laravel의 기본 로그아웃 기능 코드를 검토하면 리디렉션을 위한 하드 코딩된 경로가 표시됩니다.원본에서 URL을 변경해야 한다는 뜻이지만 공급업체를 통해 파일을 편집하는 것은 잘못된 방법입니다. 그러나 특성을 통해 코드를 재정의하는 더 나은 방법을 얻을 수 있습니다. 따라서 모든 로그아웃 기능의 코드를 LoginController 페이지에 붙여넣고 redirect('/') 기능의 매개 변수를 원하는 URL로 변경하면 됩니다.현재 내 코드는 LoginController에 입력하는 코드와 같습니다.
/**
* Log the user out of the application.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function logout(Request $request)
{
$this->guard()->logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
if ($response = $this->loggedOut($request)) {
return $response;
}
return $request->wantsJson()
? new Response('', 204)
: redirect('/login');
}
제 경우에는 사용자를 홈 페이지로 리디렉션하기를 원했습니다.'/home'
로그아웃 후에도 로그인 페이지로 계속 리디렉션되었습니다.
그 이유는 기본적으로HomeController
인증 미들웨어를 사용했습니다.
이 선을 제거해야 했습니다.$this->middleware('auth');
로부터__construct
방법
Laravel 5.3으로 오래된 웹사이트를 업데이트했습니다.여기에는 업그레이드 가이드에서 조언한 대로 Laravel Github에서 4개의 Auth 컨트롤러를 새로 추가하는 작업이 포함되었습니다.
신규 컨트롤러 3개: RegisterController.php, LoginController.php 및 ResetPassword Controller.php 모두 코드 블록을 포함합니다.
/**
* Where to redirect users after resetting their password.
*
* @var string
*/
protected $redirectTo = '/home';
원하는 리디렉션 위치로 변경/홈하기만 하면 됩니다.적어도 Laravel 5.3에서는 효과가 있었습니다(2021년 4월 자료).
라라벨 9에서는 100% 작동합니다.로그아웃 후 모든 경로로 수동 리디렉션할 때.이 클래스를 Login Controller 상단으로 가져옵니다.
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Request;
use Illuminate\Support\Facades\Session;
protected function logout(Request $request)
{
$this->guard()->logout();
Auth::logout();
Session::flush();
Session::regenerate();
return redirect('/login');
}
Laravel 8+에서 /vendor/laravel/ui/auth-backend/AuthenticateUsers.php Laravel-AuthenticateUsers.php에서 로그아웃 방법으로 리디렉션 메서드를 편집해 보십시오.
당신은 갈 수 있습니다.vendor\laravel\framework\src\Illuminate\Foundation\Auth\AuthenticatesUsers.php
제 기능을 하는logout
바꾸다return redirect('/');
당신의 경로 주소로.
언급URL : https://stackoverflow.com/questions/39327970/how-to-set-laravel-5-3-logout-redirect-path
'programing' 카테고리의 다른 글
Visual Studio Nuget Package 관리자 콘솔에서 "닫히지 않은" powershell 명령 중단 (0) | 2023.10.25 |
---|---|
ASP 간의 차이.NET 웹 후크 및 신호-R (0) | 2023.10.25 |
jetty 업데이트 9.4가 jndi lookup으로 시작되지 않음 (0) | 2023.10.25 |
자바스크립트의 'descript' 키워드 (0) | 2023.10.25 |
SpringBoot @SqsListener - 작동하지 않음 - 예외 - 작업 거부예외. (0) | 2023.10.25 |