Backport(バックポート) #2586
自動ログイン状態のメンバをログイン停止にしたとき最初の一回だけログインに成功してしまう
Start date:
2011-11-07
Due date:
% Done:
100%
Description
概要¶
自動ログイン状態のメンバをログイン停止にしたとき最初の一回だけログインに成功してしまう.
確認環境¶
OnenPNE 3.7.0-dev (master)
OpenPNE 3.6.0 (stable-3.6.x)
再現手順¶
- 自動ログインで直接ホームを表示したあとログイン停止になった状態
- 期待される結果:何らかのページを開くときにログイン画面に遷移する
- ブラウザAでログイン画面を表示する
- ブラウザAでSNSに自動ログインを有効にしてログイン
- ブラウザA終了
- ブラウザB:管理画面でログイン停止を行う
- ブラウザAを立ち上げてSNSにアクセス
- ブラウザAでSNSホーム画面の表示を行う
- ログイン画面が表示される必要がある
原因¶
#1985 での実装に不備があったため.
再現手順の際では,下記コード部334行目でopAnonymousMemberのオブジェクトが返ってくるため337行目の条件がfalseになり,次の342行目で自動ログインのメンバを取得するが,このメンバがログイン停止状態かどうかを判定する処理が抜けている.
lib/user/opSecurityUser.class.php
331 public function initializeUserStatus() 332 { 333 opActivateBehavior::disable(); 334 $member = $this->getMember(); 335 opActivateBehavior::enable(); 336 337 if ($member->getIsLoginRejected()) 338 { 339 $this->logout(); 340 $isSNSMember = false; 341 } 342 elseif ($memberId = $this->getRememberedMemberId()) 343 { 344 $this->setMemberId($memberId); 345 $isSNSMember = true; 346 } 347 elseif ($member instanceof opAnonymousMember) 348 { 349 $this->logout(); 350 $isSNSMember = false; 351 } 352 else 353 { 354 $isSNSMember = (bool)$member->getIsActive(); 355 } 356 357 $this->setIsSNSMember($isSNSMember); 358 if ($isSNSMember) 359 { 360 $member->updateLastLoginTime(); 361 } 362 }
実装案¶
diff --git a/lib/user/opSecurityUser.class.php b/lib/user/opSecurityUser.class.php index be67cc6..25f8392 100644 --- a/lib/user/opSecurityUser.class.php +++ b/lib/user/opSecurityUser.class.php @@ -334,19 +334,13 @@ class opSecurityUser extends opAdaptableUser $member = $this->getMember(); opActivateBehavior::enable(); - if ($member->getIsLoginRejected()) - { - $this->logout(); - $isSNSMember = false; - } - elseif ($memberId = $this->getRememberedMemberId()) + if ($memberId = $this->getRememberedMemberId()) { $this->setMemberId($memberId); $isSNSMember = true; } elseif ($member instanceof opAnonymousMember) { - $this->logout(); $isSNSMember = false; } else @@ -354,11 +348,20 @@ class opSecurityUser extends opAdaptableUser $isSNSMember = (bool)$member->getIsActive(); } + if ($this->getMember()->getIsLoginRejected()) + { + $isSNSMember = false; + } + $this->setIsSNSMember($isSNSMember); if ($isSNSMember) { $member->updateLastLoginTime(); } + else + { + $this->logout(); + } } public function isMember()
参考¶
Related issues
Associated revisions
History
#1
Updated by Yuya Watanabe about 11 years ago
- Assignee deleted (
Yuya Watanabe)
#2
Updated by Kousuke Ebihara about 11 years ago
- Priority changed from Normal(通常) to Urgent(急いで)
- Target version changed from OpenPNE 3.6.x to OpenPNE 3.6.1
#3
Updated by Yuya Watanabe about 11 years ago
- Assignee set to Yuya Watanabe
#4
Updated by Yuya Watanabe about 11 years ago
- Status changed from New(新規) to Pending Review(レビュー待ち)
- % Done changed from 0 to 50
更新履歴 7eabceac2bb1f5ed352e4a94811526195f84798d で適用されました。
#5
Updated by Yuya Watanabe about 11 years ago
更新履歴 71a29644d7104828891636782c67a68e8d96ffeb で適用されました。
#6
Updated by Kousuke Ebihara about 11 years ago
- Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
- % Done changed from 50 to 70
#7
Updated by Yuma Sakata about 11 years ago
- Status changed from Pending Testing(テスト待ち) to Fixed(完了)
- % Done changed from 70 to 100
テストOKです。