Bug(バグ) #2469
完了
ログイン停止にしたメンバで自動ログインにチェックをいれてログインしようとしたときに「Internal Server Error」が発生する
Yuya Watanabe さんが約13年前に追加.
約9年前に更新.
説明
ログイン停止にしたメンバで自動ログインにチェックを入れてログインしようとしたときに「Internal Server Error」が発生する.
再現方法¶
- 管理画面のメンバ管理(/pc_backend.php/member/list)でIDが1のメンバのログイン停止を行う
- より具体的には(pc_backend.php/member/reject/id/1)で「有効にする」をクリックする
- 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)
関連するチケット
2 (0件未完了 — 2件完了)
- 対象バージョン を OpenPNE 3.7.0 にセット
- ステータス を New(新規) から Accepted(着手) に変更
- 担当者 を 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');
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
- ステータス を Pending Testing(テスト待ち) から Fixed(完了) に変更
- 進捗率 を 70 から 100 に変更
- 3.6 で発生するか を Unknown (未調査) にセット
- 3.4 で発生するか を Unknown (未調査) にセット
- 対象バージョン を OpenPNE 3.7.0 から OpenPNE 3.9.0-old に変更
- 3.8 で発生するか を Unknown (未調査) にセット
他の形式にエクスポート: Atom
PDF