2

最近、Laravel 4 アプリに「remember me」機能を追加することにしました。適切な構文のメソッドが見つかりました:

Auth::attempt(array $credentials = array(), $remember = false)

これは私のニーズに次のように採用されました:

Auth::attempt($userdata, Input::has('remember'))

アプリケーションは Auth セッションを維持し、ブラウザを閉じた後でもユーザーは認証されました。

ただし、「記憶」チェックマークの状態に関係なく、Laravelは常にユーザーを認証したままにしていることがわかりました。

私はやろうとしました:

Auth::attempt($userdata, false)

Auth::attempt($userdata,)

ユーザーは、ブラウザー セッション全体でまだ認証されていました!!! さて、認証セッションを保持していないので、メソッドに第2引数の指示があるたびに、Laravel autoはそれを「true」と見なすAuth::attempt($userdata)ように感じました。Auth::attempt誰かがそれを明確にできますか?

編集:誰にとっても非常に明確にするために、この動作を再現する手順をリストします。

  1. アプリのログアウトAuth::logout();
  2. 再ログインAuth::attempt($userdata, false)
  3. ブラウザを閉じて開く
  4. アプリの URL に移動します。
  5. アプリケーションは認証されてロードされます

これはここでの最初の質問なので、しばらくお待ちください:)

4

1 に答える 1

4

編集:OPは彼が適切に電話したことを明らかにしAuth::logout()たので、回答は編集されて「本当の」回答が含まれます。

ブラウザを閉じたときに Cookie を消去するには、にlifetime値をapp/config/session/php設定します。0

前の回答

これは( にファサードされている) クラスのloginメソッドであり、最終的に によって呼び出されます。Illuminate\Auth\GuardAuthAuth::attempt()

ソース: http://laravel.com/api/source-class-Illuminate.Auth.Guard.html#263-291

 public function login(UserInterface $user, $remember = false)
 {
     $id = $user->getAuthIdentifier();

     $this->session->put($this->getName(), $id);

     // If the user should be permanently "remembered" by the application we will
     // queue a permanent cookie that contains the encrypted copy of the user
     // identifier. We will then decrypt this later to retrieve the users.
     if ($remember)
     {
         $this->queuedCookies[] = $this->createRecaller($id);
     }

     // If we have an event dispatcher instance set we will fire an event so that
     // any listeners will hook into the authentication events and run actions
     // based on the login and logout events fired from the guard instances.
     if (isset($this->events))
     {
         $this->events->fire('auth.login', array($user, $remember));
     }

     $this->setUser($user);
 }

が に設定されている場合$rememberはCookie が設定されますが、 が false またはその他の真実でない値に設定されているtrue場合、Cookie 自体はクリアされません。$remember

関数を呼び出すと、Cookie はクリアされますAuth::logout()

于 2013-11-15T03:03:43.420 に答える