Backport(バックポート) #2199
仮登録状態でメンバープロフィールページにアクセスするとFatal Error
100%
Description
概要¶
OpenPNE-3.6.x 以降で、認証が不要なページ(外部公開コンテンツのページ)に仮登録中にアクセスすると、その一部のページで Fatal Error が発生する。
例えば、次の手順でエラーの発生を確認できる。
- SNSから招待状(新規登録メール)をユーザ A に送る
- ユーザ A が、その招待状の登録用URLにアクセスする
- プロフィール入力フォームのあるページへ遷移する
- その状態で(他のページにアクセスせずに) 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
再現手順¶
- SNSから招待状(新規登録メール)をユーザ A に送る
- ユーザ A が、その招待状の登録用URLにアクセスする
- プロフィール入力フォームのあるページへ遷移する
- その状態で(他のページにアクセスせずに) member/1 にアクセスする
再現バージョン¶
- OpenPNE3.6beta8 で確認、 master でも確認
- OpenPNE3.0、3.2、3.4では再現しません。
OpenPNE-3.4.x 以前では再現しません。
Related issues
Associated revisions
History
#1
Updated by Kousuke Ebihara over 11 years ago
- Target version changed from OpenPNE3.6beta11 to OpenPNE3.6beta12
親チケットが「テスト待ち」「完了」でないものをすべて beta12 以降での対応とします。
#2
Updated by Shingo Yamada over 11 years ago
- Target version changed from OpenPNE3.6beta12 to OpenPNE3.6beta13
#3
Updated by Maki Takahashi over 11 years ago
- Status changed from New(新規) to Accepted(着手)
- Assignee changed from Shingo Yamada to Maki Takahashi
BP引き受けます
#4 Updated by Anonymous over 11 years ago
- Status changed from Accepted(着手) to Pending Review(レビュー待ち)
- % Done changed from 0 to 50
更新履歴 695c7b25d3d051ac5a75bfd0697da990977bce89 で適用されました。
#5 Updated by Anonymous over 11 years ago
更新履歴 8796757546081a594760dd331a8fad129cbed723 で適用されました。
#6
Updated by Minoru Takai over 11 years ago
更新履歴 4efde899146c6265dac2658286aade0faa0b98f8 で適用されました。
#7
Updated by Kousuke Ebihara over 11 years ago
- Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
- % Done changed from 50 to 70
#8
Updated by Mutsumi Imamura over 11 years ago
テスト実施しました。特に問題はありませんでした。
メンバーから招待、管理画面からの招待、自分で新規登録のそれぞれの方法で仮登録状態をつくり、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
Updated by Mutsumi Imamura over 11 years ago
- Status changed from Pending Testing(テスト待ち) to Fixed(完了)
- % Done changed from 70 to 100
opAshiatoPluginが有効になっている場合、仮登録状態でweb全体に公開しているプロフィールページにアクセスすると下記のような500エラーが発生します。
この問題についてのチケットを作成しました。
SNS仮登録状態でWeb全体に公開しているプロフィールのページにアクセスすると500エラーが発生する
http://redmine.openpne.jp/issues/2359
#10
Updated by Minoru Takai over 11 years ago
- Description updated (diff)