プロジェクト

全般

プロフィール

Bug(バグ) #3933

未完了

利用可能な認証プラグインが無い状態でログイン画面を開くとFatal errorになる

Youichi Kimura さんが8年以上前に追加. ほぼ5年前に更新.

ステータス:
New(新規)
優先度:
Normal(通常)
担当者:
-
対象バージョン:
開始日:
2016-04-21
期日:
進捗率:

0%

予定工数:
3.6 で発生するか:
Yes (はい)
3.8 で発生するか:
Yes (はい)

説明

Overview (現象)

管理画面の「認証プラグイン設定」(/pc_backend.php/plugin/list?type=auth) から認証プラグインの設定ページを開き、全ての認証プラグインで「PC版有効設定」を「無効にする」に設定した状態で PC 版のログイン画面を開くと HTTP 500 エラーとなり、Web ブラウザ側にはエラーメッセージ等もない真っ白なページが表示される。

Apache 等のエラーログには下記のようなエラーが記録される:

[Thu Apr 21 10:30:57.453033 2016] [fcgid:warn] [pid 1331:tid 140111127688960] [client 10.0.2.2:49636] mod_fcgid: stderr: PHP Fatal error:  Cannot instantiate abstract class opAuthAdapter in /var/www/sns/op36.localhost/lib/user/opAdaptableUser.class.php on line 99, referer: http://op36.localhost:8080/

類似の設定として、管理画面の「SNS設定」には「PC版使用設定」「携帯版使用設定」があるが、ここで無効に設定した場合は「このページにはアクセスできません。」とエラーメッセージが表示される。
認証プラグインの「PC版有効設定」および「携帯版有効設定」は、PC 版のみアクセス可能な SNS として設定したいなどの目的で無効に設定する可能性があるが、当チケットの現象ではユーザー側にメッセージを表示することもなく Fatal error で異常終了するという形で SNS が利用できなくなるため、「PC版使用設定」「携帯版使用設定」と比べて不親切である。

Causes (原因)

source:lib/user/opAdaptableUser.class.php@43190aa1#L28

  public function initialize(sfEventDispatcher $dispatcher, sfStorage $storage, $options = array())
  {
    parent::initialize($dispatcher, $storage, $options);
    if ($this->getMemberId() && $this->isTimedOut())
    {   
      $this->getAttributeHolder()->removeNamespace('opSecurityUser');
    }   

    $request = sfContext::getInstance()->getRequest();
    $authMode = $request->getUrlParameter('authMode');
    if ($authMode)
    {   
      $this->setCurrentAuthMode($authMode);
    }   

    $this->createAuthAdapter($this->getCurrentAuthMode());
  }

上記のコードで、利用可能な認証プラグインが存在しない状態で $this->getCurrentAuthMode() が呼び出されると null が返るが、このメソッドではそのことが考慮されておらず $this->createAuthAdapter()$authMode に null を渡してしまう。

  public static function getAuthAdapterClassName($authMode)
  {
    return 'opAuthAdapter'.ucfirst($authMode);
  }

途中の呼び出し過程は省略するが、上記の opAdaptableUser::getAuthAdapterClassName() メソッドにも $authMode が null の状態で呼び出され、'opAuthAdapter' の文字列が返される。そして opAuthAdapter クラスを new でインスタンス化しようとすることで Fatal error が発生する。

Way to fix (修正内容)

修正内容を記入

Youichi Kimura さんが8年以上前に更新

kaoru n さんが7年以上前に更新

  • 対象バージョンOpenPNE 3.9.0-old から OpenPNE 3.9.0 に変更

kaoru n さんがほぼ5年前に更新

  • 対象バージョンOpenPNE 3.9.0 から OpenPNE 3.10.x に変更

isao sano さんがほぼ5年前に更新

確認しました。問題ありません。

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