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/
これが私がやった方法です。 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の原則(繰り返さないでください)、できるだけ多くのコードを再利用してください。
受け入れられた答えは問題ありませんが、loggedOut
メソッドを上書きするだけで、ログアウトロジックに触れることを完全に回避できます。
// App\Http\Controllers\Auth\LoginController.php
protected function loggedOut(Request $request) {
return redirect('/where/ever/you/want/to/go');
}
私は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);
}
}
もちろん、それに応じて認証ルートを更新することを忘れないでください。
Laravel-5.2を使用しています。使用したものは次のとおりです。
public function logout()
{
Auth::logout();
Session::flush();
return redirect('/');
}
インポートしたことを確認してください:
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
コントローラー内。
laravel 5.3のAuth :: routesメソッドは、GETルートの代わりに/ logoutのPOSTルートを登録します。これにより、他のWebアプリケーションがユーザーをアプリケーションからログアウトさせないようにします。アップグレードするには、ログアウトリクエストを変換してPOST動詞を使用するか、このルートをファイルRoutes/web.phpに追加して/ logout URIの独自のGETルートを登録する必要があります。
Route::get('/logout', 'Auth\LoginController@logout');
loginController.phpで定義されているとおり、正常に動作し、「/」ディレクトリにリダイレクトされます。
引用元:-
最も簡単な方法は、App\Http\Controllers\Auth\LoginController
のLoginController
でログアウト特性をオーバーライドすることです
public function logout(Request $request){
$this->guard()->logout();
$request->session()->flush();
$request->session()->regenerate();
return redirect()->route('you_route_name');
}
すべてのログアウトアクションは、イベントEvents\Logout
を起動します。このイベントをリッスンするリスナーを作成し、そこにいくつかのロジックを追加できます。リスナーの詳細については、こちらをご覧ください https://laravel.com/docs/5.3/events
誰かが今それを数日見ていて、彼らが使用しているlaravelのバージョンが5.7であると仮定します
LoginController.jsにこの行を追加します
public function logout()
{
Auth::logout();
return redirect()->to('/your-route');
}
これは、laravelが提供する標準の認証モジュールを使用していることを前提としています
Routes/web.phpでこれを使用するだけです
Route::get('logout', function (){
Auth::logout();
return redirect('your URL');
});
すぐに使用できるAuthControllerを使用している場合は、この変数を先頭に追加してから、文字列を変更して任意の場所にリダイレクトします。
protected $redirectAfterLogout = '/';
AuthenticatesUsersクラスには、この変数をチェックするログアウト機能があります。
public function logout()
{
Auth::guard($this->getGuard())->logout();
return redirect(property_exists($this, 'redirectAfterLogout') ? $this->redirectAfterLogout : '/');
}
ログアウトコードの繰り返しを避け、DRYを追跡するには、
Auth::logout()
を呼び出して、パスにリダイレクトを返します。または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');;
}
受け入れられた答えは問題ありませんが、loggedOutメソッドを単に上書きするだけで、ログアウトロジックに触れることを完全に回避できます。
protected function loggedOut(Request $request) {
return redirect('/where/ever/you/want/to/go');
}