13

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

4

8 に答える 8

38

Laravel 5.2でも同様の問題がありました。ルートを次のように変更する必要があります

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

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

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

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

于 2016-01-07T23:58:42.373 に答える
6

以下のコードを使用

Auth::logout();

また

auth()->logout();
于 2015-12-31T09:54:04.590 に答える
4

問題は、AuthController コンストラクターの「ゲスト」ミドルウェアにあります。$this->middleware('guest', ['except' => 'logout']);からに変更する必要があります。$this->middleware('guest', ['except' => 'getLogout']);

カーネル ファイルを確認すると、ゲスト ミドルウェアが次を指していることがわかります。\App\Http\Middleware\RedirectIfAuthenticated::class

このミドルウェアは、ユーザーが認証されているかどうかを確認し、認証されている場合はユーザーをルート ページにリダイレクトしますが、認証されていない場合はユーザーがアクションを実行できるようにします。を利用$this->middleware('guest', ['except' => 'getLogout']);することで、getLogout関数の呼び出し時にミドルウェアが適用されなくなり、認証済みのユーザーが利用できるようになります。

N/B: 元の回答と同様に、laravel の実装では getLogout メソッドが単純に logout メソッドを返すため、getLogout変更できます。logout

于 2016-04-10T16:51:42.953 に答える
2

else ステートメントのHttp->Middleware->Authenticate.php変更でlogin/

return redirect()->guest('/');

routes.php で次のルートを定義します

Route::get('/', function () {
    return view('login');
});

関数に続くログアウト呼び出しの場合:

public function getlogout(){
    \Auth::logout();
    return redirect('/home');
}

重要:最初の呼び出し/homeの代わりににリダイレクトしてから、ミドルウェアでリダイレクトして/$this->middleware('auth');/

于 2016-04-09T06:48:08.160 に答える
1

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

$this->middleware('web');
$this->middleware('guest', ['except' => 'logout']);
于 2016-01-14T02:28:41.320 に答える
0

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

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

これで、L 5.2 で何も変更しなくても、ログアウトは正常に機能するはずAuthControllerです。

于 2016-08-13T06:12:21.333 に答える
0

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

于 2016-08-12T01:06:06.847 に答える
0
/**
 * 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();
}
于 2017-05-26T06:32:03.230 に答える