Laravel 5.2で非常にシンプルなアプリを構築していますが、AuthController
のアクションを使用してログアウトすると、単に機能しません。チェックするナビゲーションバーがあります。 Auth::check()
の場合、ログアウトアクションを呼び出した後も変更されません。
Routes.phpファイル内にこのルートがあります:
Route::get('users/logout', 'Auth\AuthController@getLogout');
そしてそれは外にあります
Route::group(['middleware' => ['web']], function ()
ステートメント。
また、AuthController.phpファイルの最後にfollowアクションを追加しようとしました。
public function getLogout()
{
$this->auth->logout();
Session::flush();
return redirect('/');
}
あなたはなにか考えはありますか?
編集1
GoogleのChromeキャッシュをクリアすると、動作します。
また、Laravel 5.2。でルートを変更する必要があります。
Route::get('auth/logout', 'Auth\AuthController@logout');
またはAuthControllerコンストラクターで追加
public function __construct()
{
$this->middleware('guest', ['except' => ['logout', 'getLogout']]);
}
それは私のために働いた。
以下のコードを使用
Auth::logout();
または
auth()->logout();
問題は、AuthControllerコンストラクターの「ゲスト」ミドルウェアにあります。 $this->middleware('guest', ['except' => 'logout']);
から$this->middleware('guest', ['except' => 'getLogout']);
に変更する必要があります
カーネルファイルを確認すると、ゲストミドルウェアが_\App\Http\Middleware\RedirectIfAuthenticated::class
_を指していることがわかります。
このミドルウェアは、ユーザーが認証されているかどうかを確認し、認証されている場合はユーザーをルートページにリダイレクトしますが、認証されていない場合はユーザーにアクションを実行させます。 $this->middleware('guest', ['except' => 'getLogout']);
を使用すると、getLogout関数が呼び出されたときにミドルウェアが適用されないため、認証されたユーザーがミドルウェアを使用できるようになります。
N/B:元の回答と同様に、getLogoutメソッドはlaravelの実装で単にログアウトメソッドを返すため、getLogout
をlogout
に変更できます。
Http->Middleware->Authenticate.php
でelseステートメントのlogin
を/
に変更します
return redirect()->guest('/');
routes.phpで次のルートを定義します
Route::get('/', function () {
return view('login');
});
ログアウトコールの次の機能:
public function getlogout(){
\Auth::logout();
return redirect('/home');
}
重要:最初に$this->middleware('auth');
を呼び出す/home
の代わりに/
にリダイレクトするそして、ミドルウェアで/
にリダイレクトします
これは、AuthControllerのコンストラクターのコンテンツである必要があります
$this->middleware('web');
$this->middleware('guest', ['except' => 'logout']);
/**
* 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()->flush();
$request->session()->regenerate();
return redirect('/');
}
/**
* Get the guard to be used during authentication.
*
* @return \Illuminate\Contracts\Auth\StatefulGuard
*/
protected function guard()
{
return Auth::guard();
}
以下のルートを追加し、これをルートグループ(ミドルウェア)内に追加しないでください。
Route::get('your-route', 'Auth\AuthController@logout');
これで、ログアウトはAuthController
で何も変更せずにL 5.2で機能するはずです。
_routes.php
_ファイルRoute::get('auth/logout', 'Auth\AuthController@getLogout');
にこの行を追加し、ビューにこれを追加します<a href="{{ url('/auth/logout') }}" > Logout </a>