プロジェクト

全般

プロフィール

Bug(バグ) #1985

完了

Cookie for automatic login is deleted when automatic login is done (自動ログイン時に自動ログイン用のCookieが削除される)

Shogo Kawahara さんが13年以上前に追加. ほぼ3年前に更新.

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

100%

予定工数:
3.6 で発生するか:
Unknown (未調査)
3.8 で発生するか:
Unknown (未調査)

説明

Overview

Cookie for automatic login is deleted when automatic login is done.

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

Way to repro

1. SNSに自動ログインを有効にしてログイン
2. ブラウザ終了
3. 同ブラウザでSNSにアクセス (自動ログイン・この時点でCookie消失)
4. 同ブラウザ終了
5. 同ブラウザでSNSにアクセスするとログイン画面になる。

Environment

OpenPNE3.6.x 〜

Causes

opBaseSecurityUser::isValidSiteIdentifier()

がセッション無効時に false を返す。そのため、同クラス initialize() により
ログアウト処理が実行され、自動ログイン用Cookieが削除される。

その後、自動ログインの処理が実行されるため、再現方法 3 の時点では
ログインすると考えられる。

Way to fix

opBaseSecurityUser::isValidSiteIdentifier() について セッションが無いときは
true を返すように変更

上記修正後 #1182 で再度発生した問題について

概要

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

再現手順

  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としてログイン画面にリダイレクトされる

原因

#1182 で修正されたコミット( decc4e2d )以降のソースで下記部分において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   }

修正方針

opRememberLoginFilterを廃止し,Memberオブジェクトが初期化される際にopAnonymousMemberかどうかでログアウト処理を行うときと同じタイミングで自動ログインの判定を行う方針とする.

参考

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


関連するチケット 4 (0件未完了4件完了)

関連している OpenPNE 3 - Backport(バックポート) #2139: [PATCH] Cookie for automatic login is deleted when automatic login is done (自動ログイン時に自動ログイン用のCookieが削除される)Fixed(完了)Kousuke Ebihara2011-03-292011-06-24

操作
関連している OpenPNE 3 - Bug(バグ) #1182: 携帯でSNS強制退会直後にアクセスするとCredentials Required画面が表示されるFixed(完了)Shinichi Urabe2010-06-18

操作
関連している OpenPNE 3 - Backport(バックポート) #2453: 自動ログイン時に自動ログイン用のCookieが削除されるFixed(完了)Yuya Watanabe2011-10-03

操作
関連している OpenPNE 3 - Bug(バグ) #2585: 自動ログイン状態のメンバをログイン停止にしたとき最初の一回だけログインに成功してしまうFixed(完了)Yuya Watanabe2011-11-07

操作

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