web-dev-qa-db-ja.com

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/

37
Tim van Uum

これが私がやった方法です。 Auth\LoginControllerには次のものがあります。

use AuthenticatesUsers;

次のように変更します。

use AuthenticatesUsers {
    logout as performLogout;
}

次に、LoginControllerで新しいlogout()メソッドを定義します。

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

もちろん、その特性の通常のlogout()メソッドには3行しかないため(システムからユーザーをログアウトするために使用されます)、メソッドにそれらをコピーできますが、常にDRYの原則(繰り返さないでください)、できるだけ多くのコードを再利用してください。

53
Avram

ララヴェル> 5.7

受け入れられた答えは問題ありませんが、loggedOutメソッドを上書きするだけで、ログアウトロジックに触れることを完全に回避できます。

// App\Http\Controllers\Auth\LoginController.php
protected function loggedOut(Request $request) {
    return redirect('/where/ever/you/want/to/go');
}
28
Chris

私は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);
    }
}

もちろん、それに応じて認証ルートを更新することを忘れないでください。

11

Laravel-5.2を使用しています。使用したものは次のとおりです。

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

インポートしたことを確認してください:

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

コントローラー内。

6
Sachith

laravel 5.3のAuth :: routesメソッドは、GETルートの代わりに/ logoutのPOSTルートを登録します。これにより、他のWebアプリケーションがユーザーをアプリケーションからログアウトさせないようにします。アップグレードするには、ログアウトリクエストを変換してPOST動詞を使用するか、このルートをファイルRoutes/web.phpに追加して/ logout URIの独自のGETルートを登録する必要があります。

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

loginController.phpで定義されているとおり、正常に動作し、「/」ディレクトリにリダイレクトされます。

引用元:-

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

3
Mohamed Gabr

最も簡単な方法は、App\Http\Controllers\Auth\LoginControllerLoginControllerでログアウト特性をオーバーライドすることです

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

    return redirect()->route('you_route_name');
}
2
ArtemSky

すべてのログアウトアクションは、イベントEvents\Logoutを起動します。このイベントをリッスンするリスナーを作成し、そこにいくつかのロジックを追加できます。リスナーの詳細については、こちらをご覧ください https://laravel.com/docs/5.3/events

2

誰かが今それを数日見ていて、彼らが使用しているlaravelのバージョンが5.7であると仮定します

LoginController.jsにこの行を追加します

public function logout()
{
    Auth::logout();
    return redirect()->to('/your-route');
}

これは、laravelが提供する標準の認証モジュールを使用していることを前提としています

2
S. Domeng

Routes/web.phpでこれを使用するだけです

Route::get('logout', function (){
Auth::logout();
return redirect('your URL');
});
1
Xander

すぐに使用できるAuthControllerを使用している場合は、この変数を先頭に追加してから、文字列を変更して任意の場所にリダイレクトします。

protected $redirectAfterLogout = '/';

AuthenticatesUsersクラスには、この変数をチェックするログアウト機能があります。

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

    return redirect(property_exists($this, 'redirectAfterLogout') ? $this->redirectAfterLogout : '/');
}
1
cyclops1101

ログアウトコードの繰り返しを避け、DRYを追跡するには、

  • Auth/LoginControllerにカスタムログアウトルートを追加し、Auth::logout()を呼び出して、パスにリダイレクトを返します。または
  • after-middlewareを追加し(たとえばredirectAfterLogout)、ログアウトルートに追加します
0
Aranya Sen

Laravel 5.8で以下のパスを見つけます:

App\Http\Controllers\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');;
}
0
Zaheer Sadique

受け入れられた答えは問題ありませんが、loggedOutメソッドを単に上書きするだけで、ログアウトロジックに触れることを完全に回避できます。

protected function loggedOut(Request $request) {
    return redirect('/where/ever/you/want/to/go');
}
0
Omid Ahmadyani