programing

larravel 5.3 로그아웃 리디렉션 경로를 설정하는 방법은 무엇입니까?

cafebook 2023. 10. 25. 23:44
반응형

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

반응형