プロジェクト

全般

プロフィール

Backport(バックポート) #2199

仮登録状態でメンバープロフィールページにアクセスするとFatal Error

isao sanoほぼ13年前に追加. 12年以上前に更新.

ステータス:
Fixed(完了)
優先度:
High(高め)
担当者:
対象バージョン:
開始日:
2011-06-10
期日:
進捗率:

100%


説明

概要

OpenPNE-3.6.x 以降で、認証が不要なページ(外部公開コンテンツのページ)に仮登録中にアクセスすると、その一部のページで Fatal Error が発生する。

例えば、次の手順でエラーの発生を確認できる。

  1. SNSから招待状(新規登録メール)をユーザ A に送る
  2. ユーザ A が、その招待状の登録用URLにアクセスする
  3. プロフィール入力フォームのあるページへ遷移する
  4. その状態で(他のページにアクセスせずに) member/1 にアクセスする

主なロールとして、以下の状態がある。

  • ログイン中メンバー
  • 仮登録中メンバー
  • 非ログインユーザ

権限があるロールかを確認するために opSercurityUser::getMember() の返り値を用いている箇所(※)があるが、そこでは getMember() が Member オブジェクトか opAnonymousMember オブジェクトを返すことを前提としている。しかし仮登録中である場合には getMember() は false が返っているため Fatal Error が生じている。

  • ※ opDynamicAclRoute::getObject() : 39 行目の $this->getCurrentMemner() では Member オブジェクトかそのサブクラスのオブジェクトが返ることを期待している
    lib/routing/opDynamicAclRoute.class.php
    
    37-    if ($result instanceof opAccessControlRecordInterface)
    38-    {
    39-      if (!$result->isAllowed($this->getCurrentMember(), $this->options['privilege']))
    

また、「ログイン中メンバー」であることを確認するために opSecurityUser::getMemberId() を用いている箇所があるが、「仮登録中メンバー」であっても member_id が取得できてしまうため、権限を正しく判定できていない。

修正方針

opSecurityUser::getMember(), opSecurityUser::getMemberId() が返す値の仕様を変更する。

詳細は note-16 以降を参照。

対象バージョン

  • stable-3.6.x ブランチ
  • master ブランチ

3.4.x 以前は外部公開機能がなく 3.6.x 以降と事情が異なるため、この問題の対象ではない(仮に似た問題があったとしても別のものと考えたほうがよい)。

チケット作成時の内容

仮登録状態でメンバープロフィールページにアクセスするとFatal Error

現象

OpenPNE-3.6beta8 で、仮登録状態でメンバープロフィールページにアクセスすると Fatal Error が発生する。

Catchable fatal error: Argument 1 passed to opDoctrineRecord::isAllowed() must be an instance of Member, boolean given, 
called in /home/imamura/sns/36x.bughunt.uh-openpne5.pne.jp/lib/routing/opDynamicAclRoute.class.php on line 34 and 
defined in /home/imamura/sns/36x.bughunt.uh-openpne5.pne.jp/lib/util/opDoctrineRecord.class.php on line 154

再現手順

  1. SNSから招待状(新規登録メール)をユーザ A に送る
  2. ユーザ A が、その招待状の登録用URLにアクセスする
  3. プロフィール入力フォームのあるページへ遷移する
  4. その状態で(他のページにアクセスせずに) member/1 にアクセスする

再現バージョン

  • OpenPNE3.6beta8 で確認、 master でも確認
  • OpenPNE3.0、3.2、3.4では再現しません。

OpenPNE-3.4.x 以前では再現しません。


関連するチケット

関連している OpenPNE 3 - Bug(バグ) #1944: 仮登録状態でメンバープロフィールページにアクセスするとFatal Error Fixed(完了) 2011-03-07

関係しているリビジョン

リビジョン 695c7b25 (差分)
Minoru Takai12年以上前に追加

(fixes #2199, BP from #1944) changed specification of opSecurityUser::getMember() to return always Member or opAnonymousMember object. getMemberId() too.

リビジョン 87967575 (差分)
Minoru Takai12年以上前に追加

(fixes #2199, BP from #1944) removed "if ($member)," because it is disused conditional expression.

リビジョン 4efde899 (差分)
Minoru Takai12年以上前に追加

(fixes #2199, BP from #1944) added comment for getMember(), and cast to return bool in isSNSMember().

履歴

#1 Kousuke Ebiharaほぼ13年前に更新

  • 対象バージョンOpenPNE3.6beta11 から OpenPNE3.6beta12 に変更

親チケットが「テスト待ち」「完了」でないものをすべて beta12 以降での対応とします。

#2 Shingo Yamadaほぼ13年前に更新

  • 対象バージョンOpenPNE3.6beta12 から OpenPNE3.6beta13 に変更

#3 Maki Takahashi12年以上前に更新

  • ステータスNew(新規) から Accepted(着手) に変更
  • 担当者Shingo Yamada から Maki Takahashi に変更

BP引き受けます

#4 匿名ユーザー が12年以上前に更新

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

更新履歴 695c7b25d3d051ac5a75bfd0697da990977bce89 で適用されました。

#5 匿名ユーザー が12年以上前に更新

更新履歴 8796757546081a594760dd331a8fad129cbed723 で適用されました。

#6 Minoru Takai12年以上前に更新

更新履歴 4efde899146c6265dac2658286aade0faa0b98f8 で適用されました。

#7 Kousuke Ebihara12年以上前に更新

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

#8 Mutsumi Imamura12年以上前に更新

テスト実施しました。特に問題はありませんでした。
メンバーから招待、管理画面からの招待、自分で新規登録のそれぞれの方法で仮登録状態をつくり、web全体に公開しているメンバーのプロフィールページと、全体に公開(SNS内)にしているメンバーのプロフィールページにそれぞれアクセスする動作を確認しました。

opAshiatoPluginが有効になっている場合、仮登録状態でweb全体に公開しているプロフィールページにアクセスすると下記のような500エラーが発生します。
この問題はあしあとプラグインの問題と判断し別のチケットで対応することとします。

500 | Internal Server Error | Doctrine_Connection_Mysql_Exception
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`36beta13_tetete/ashiato`, CONSTRAINT `ashiato_member_id_from_member_id` FOREIGN KEY (`member_id_from`) REFERENCES `member` (`id`) ON DELETE SET NULL)

#9 Mutsumi Imamura12年以上前に更新

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

opAshiatoPluginが有効になっている場合、仮登録状態でweb全体に公開しているプロフィールページにアクセスすると下記のような500エラーが発生します。

この問題についてのチケットを作成しました。

SNS仮登録状態でWeb全体に公開しているプロフィールのページにアクセスすると500エラーが発生する
http://redmine.openpne.jp/issues/2359

#10 Minoru Takai12年以上前に更新

  • 説明 を更新 (diff)

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