プロジェクト

全般

プロフィール

Backport(バックポート) #3157

完了

自動ログイン時に自動ログイン用のCookieが削除される

開 石切山 さんが12年以上前に追加. 12年以上前に更新.

ステータス:
Fixed(完了)
優先度:
Normal(通常)
担当者:
対象バージョン:
開始日:
2011-10-03
期日:
進捗率:

100%

予定工数:

説明

概要

ログイン時に自動ログインにチェックを入れているにも関わらず,次回自動ログインは成功するが,その次の自動ログインに失敗する.
失敗する原因として自動ログイン用のCookieが削除されていることが確認されている.
この問題は #2139 によって修正されたはずであるが, #2315 の修正によって再度発生するようになった.

再現手順

  1. SNSに自動ログインを有効にしてログイン
  2. ブラウザ終了
  3. 同ブラウザでSNSにアクセス
  4. 同ブラウザ終了
  5. 同ブラウザでSNSにアクセス
    • ログアウト状態となっている

問題までの処理の流れ

  1. メンバが「次回から自動的にログイン」にチェックをいれてログインする
    • 自動ログイン用のCookieと今回限りのログイン用のCookieがサーバから送られてきてブラウザに保存される
  2. ブラウザを終了する
    • 今回限りのログイン用Cooikeが削除されるが自動ログイン用Cookieは残ったままとなる
  3. ブラウザを立ち上げてSNSにアクセスする
    • 最初は未ログイン状態となりopAnonymousMemberのインスタンスが生成される
    • opAnonymousMember生成時にログアウト処理が行われて自動ログイン用Cookieを削除する処理が行われる
    • ブラウザから送られて来た自動ログイン用Cookieを用いてopRememberLoginFilterがログインに成功する
    • ログインを完了してSNSを表示したときには今回限りのログイン用Cookieが存在するが自動ログイン用Cookieが削除されている状態となる
  4. ブラウザを終了する
    • 今回限りのログイン用Cookieが削除されてなにもない状態となる
  5. ブラウザを立ち上げてSNSをにアクセスする
    • opAmonymouseMemberとしてログイン画面にリダイレクトされる

原因

#2315 で修正されたコミット( 7fc9dfcc ) で下記部分においてopAnonymousMemberのインスタンス生成時にログアウト処理が行われるように修正されたため.

lib/user/opSecurityUser.class.php 330行目

321  /**
322   * Initializes all credentials associated and status with this user.
323   */
324   public function initializeUserStatus()
325   {
326     opActivateBehavior::disable();
327     $member = $this->getMember();
328     opActivateBehavior::enable();
329 
330     if ($member instanceof opAnonymousMember || $member->getIsLoginRejected())
331     {
332       $this->logout();
333       $isSNSMember = false;
334     }
335     else
336     {
337       $isSNSMember = (bool)$member->getIsActive();
338     }
339 
340     $this->setIsSNSMember($isSNSMember);
341     if ($isSNSMember)
342     {
343       $member->updateLastLoginTime();
344     }
345   }

修正方針

参考

調査を行ったログ: http://redmine.openpne.jp/issues/1985#note-13

他の形式にエクスポート: Atom PDF