Project

General

Profile

Bug(バグ) #2469

ログイン停止にしたメンバで自動ログインにチェックをいれてログインしようとしたときに「Internal Server Error」が発生する

Added by Yuya Watanabe about 8 years ago. Updated about 4 years ago.

Status:
Fixed(完了)
Priority:
Normal(通常)
Assignee:
Target version:
Start date:
2011-10-05
Due date:
% Done:

100%

3.6 で発生するか:
Unknown (未調査)
3.8 で発生するか:
Unknown (未調査)

Description

概要

ログイン停止にしたメンバで自動ログインにチェックを入れてログインしようとしたときに「Internal Server Error」が発生する.

再現方法

  1. 管理画面のメンバ管理(/pc_backend.php/member/list)でIDが1のメンバのログイン停止を行う
    • より具体的には(pc_backend.php/member/reject/id/1)で「有効にする」をクリックする
  2. SNSのログイン画面を開いてIDが1のメンバのメールアドレス及びパスワードの入力と「次回から自動的にログイン」にチェックを入れて「ログイン」をクリックする
    • 「現在、サーバが混み合っているか、メンテナンス中です。」という表示がされる

原因

以下の箇所で249行目ではログインが停止されているという理由でログアウト状態となるが,251行目ではフォーム内容を確認し253行目を実行する.
この253行目を実行する際に同ファイル184行目でメンバIDを取得するが,249行目ですでにログアウト状態となっていてメンバIDを取得できないためLogicException()が発生する.

lib/user/opSecurityUser.class.php

 249     $this->initializeUserStatus();
 250
 251     if ($this->getAuthAdapter()->getAuthForm()->getValue('is_remember_me'))
 252     {
 253       $this->setRememberLoginCookie();
 254     }

 181     else
 182     {
 183       $rememberKey = opToolkit::getRandom();
 184       if (!$this->getMemberId())
 185       {
 186         throw new LogicException('No login');
 187       }
 188       $this->getMember()->setConfig('remember_key', $rememberKey);

確認環境

OpenPNE3.7.0-dev (master)
OpenPNE3.6.0-dev (stable-3.6.x)


Related issues

Related to OpenPNE 3 - Backport(バックポート) #2473: ログイン停止にしたメンバで自動ログインにチェックをいれてログインしようとしたときに「Internal Server Error」が発生する Fixed(完了) 2011-10-05
Related to OpenPNE 3 - Backport(バックポート) #3194: ログイン停止にしたメンバで自動ログインにチェックをいれてログインしようとしたときに「Internal Server Error」が発生する Fixed(完了) 2011-10-05

Associated revisions

Revision 5b212017 (diff)
Added by Yuya Watanabe about 8 years ago

(fixes #2469) fixed not to occur internal server error

History

#1 Updated by Yuya Watanabe about 8 years ago

  • Description updated (diff)

#2 Updated by Yuya Watanabe about 8 years ago

  • Description updated (diff)

#3 Updated by Yuya Watanabe about 8 years ago

  • Target version set to OpenPNE 3.7.0

#4 Updated by Yuya Watanabe about 8 years ago

  • Description updated (diff)

#5 Updated by Yuya Watanabe about 8 years ago

  • Status changed from New(新規) to Accepted(着手)
  • Assignee set to Yuya Watanabe

修正方針

setRememberLoginCookie()はログインしている状態で意味があるので,認証しているかどうかを先に確認する方がいいと思われる.
コードを見てみると認証しているかどうかを確認する部分が該当箇所の直後である256行目に存在するため,この中で処理を行うようにすることが適切であると考えられる.

lib/user/opSecurityUser.class.php

249     $this->initializeUserStatus();
250 
251     if ($this->getAuthAdapter()->getAuthForm()->getValue('is_remember_me'))
252     {
253       $this->setRememberLoginCookie();
254     }
255 
256     if ($this->isAuthenticated())
257     {
258       $this->setCurrentAuthMode($this->getAuthAdapter()->getAuthModeName());
259       $uri = $this->getAuthAdapter()->getAuthForm()->getValue('next_uri');
260 

実装案

diff --git a/lib/user/opSecurityUser.class.php b/lib/user/opSecurityUser.class.php
index 7d66a46..2dd1714 100644
--- a/lib/user/opSecurityUser.class.php
+++ b/lib/user/opSecurityUser.class.php
@@ -248,13 +248,13 @@ class opSecurityUser extends opAdaptableUser

     $this->initializeUserStatus();

-    if ($this->getAuthAdapter()->getAuthForm()->getValue('is_remember_me'))
-    {
-      $this->setRememberLoginCookie();
-    }
-
     if ($this->isAuthenticated())
     {
+      if ($this->getAuthAdapter()->getAuthForm()->getValue('is_remember_me'))
+      {
+        $this->setRememberLoginCookie();
+      }
+
       $this->setCurrentAuthMode($this->getAuthAdapter()->getAuthModeName());
       $uri = $this->getAuthAdapter()->getAuthForm()->getValue('next_uri');

#6 Updated by wa ta about 8 years ago

  • Status changed from Accepted(着手) to Pending Review(レビュー待ち)
  • % Done changed from 0 to 50

更新履歴 5b212017f7a4c20dd4ea5d7b9a6240559d6b8ee3 で適用されました。

#7 Updated by Mutsumi Imamura about 8 years ago

  • 360対象 set to 3.6.0

#8 Updated by Kousuke Ebihara about 8 years ago

  • Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
  • % Done changed from 50 to 70

#9 Updated by Shouta Kashiwagi over 7 years ago

  • Status changed from Pending Testing(テスト待ち) to Fixed(完了)
  • % Done changed from 70 to 100
  • 3.6 で発生するか set to Unknown (未調査)
  • 3.4 で発生するか set to Unknown (未調査)

テストOKです。

#10 Updated by Yuma Sakata about 7 years ago

  • Target version changed from OpenPNE 3.7.0 to OpenPNE 3.9.0-old
  • 3.8 で発生するか set to Unknown (未調査)

Also available in: Atom PDF