web-dev-qa-db-ja.com

Laravel 5.2:Auth :: logout()が機能していません

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キャッシュをクリアすると、動作します。

13
Felipe Peña

また、Laravel 5.2。でルートを変更する必要があります。

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

またはAuthControllerコンストラクターで追加

public function __construct()
{
    $this->middleware('guest', ['except' => ['logout', 'getLogout']]);
}

それは私のために働いた。

37
Aztecnologic

以下のコードを使用

Auth::logout();

または

auth()->logout();
6
Nimisha Molia

問題は、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の実装で単にログアウトメソッドを返すため、getLogoutlogoutに変更できます。

4
nonybrighto

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の代わりに/にリダイレクトするそして、ミドルウェアで/にリダイレクトします

2
Hekmat

これは、AuthControllerのコンストラクターのコンテンツである必要があります

$this->middleware('web');
$this->middleware('guest', ['except' => 'logout']);
1
Napoleon256611
/**
 * 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();
}
0
Mehran

以下のルートを追加し、これをルートグループ(ミドルウェア)内に追加しないでください。

Route::get('your-route', 'Auth\AuthController@logout');

これで、ログアウトはAuthControllerで何も変更せずにL 5.2で機能するはずです。

0
im_tsm

_routes.php_ファイルRoute::get('auth/logout', 'Auth\AuthController@getLogout');にこの行を追加し、ビューにこれを追加します<a href="{{ url('/auth/logout') }}" > Logout </a>

0
Nassima Noufail