プロジェクト

全般

プロフィール

Backport(バックポート) #2586

完了

自動ログイン状態のメンバをログイン停止にしたとき最初の一回だけログインに成功してしまう

Yuya Watanabe さんが約13年前に追加. 約13年前に更新.

ステータス:
Fixed(完了)
優先度:
Urgent(急いで)
担当者:
対象バージョン:
開始日:
2011-11-07
期日:
進捗率:

100%

予定工数:

説明

概要

自動ログイン状態のメンバをログイン停止にしたとき最初の一回だけログインに成功してしまう.

確認環境

OnenPNE 3.7.0-dev (master)
OpenPNE 3.6.0 (stable-3.6.x)

再現手順

  • 自動ログインで直接ホームを表示したあとログイン停止になった状態
    • 期待される結果:何らかのページを開くときにログイン画面に遷移する
    1. ブラウザAでログイン画面を表示する
    2. ブラウザAでSNSに自動ログインを有効にしてログイン
    3. ブラウザA終了
    4. ブラウザB:管理画面でログイン停止を行う
    5. ブラウザAを立ち上げてSNSにアクセス
    6. ブラウザ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()

参考

http://redmine.openpne.jp/issues/1985#note-22


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

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

操作

Yuya Watanabe さんが約13年前に更新

  • 担当者 を削除 (Yuya Watanabe)

Kousuke Ebihara さんが約13年前に更新

  • 優先度Normal(通常) から Urgent(急いで) に変更
  • 対象バージョンOpenPNE 3.6.x から OpenPNE 3.6.1 に変更

Yuya Watanabe さんが約13年前に更新

  • 担当者Yuya Watanabe にセット

Yuya Watanabe さんが約13年前に更新

  • ステータスNew(新規) から Pending Review(レビュー待ち) に変更
  • 進捗率0 から 50 に変更

更新履歴 7eabceac2bb1f5ed352e4a94811526195f84798d で適用されました。

Yuya Watanabe さんが約13年前に更新

更新履歴 71a29644d7104828891636782c67a68e8d96ffeb で適用されました。

Kousuke Ebihara さんが約13年前に更新

  • ステータスPending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
  • 進捗率50 から 70 に変更

Yuma Sakata さんが約13年前に更新

  • ステータスPending Testing(テスト待ち) から Fixed(完了) に変更
  • 進捗率70 から 100 に変更

テストOKです。

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