プロジェクト

全般

プロフィール

Backport(バックポート) #2063

完了

コミュニティのメンバー管理画面に戻るためのYes/Noフォームで「いいえ」を選ぶとアクセスエラーになる

Masato Nagasawa さんが13年以上前に追加. 13年以上前に更新.

ステータス:
Invalid(無効)
優先度:
Normal(通常)
担当者:
-
対象バージョン:
開始日:
2011-05-06
期日:
進捗率:

0%

予定工数:

説明

現象

  1. 自分が管理者であるコミュニティページ(/community/:id)にアクセスする
  2. メンバー管理ページ(/community/member/manage?id=:id)にアクセスする
  3. メンバー管理画面に戻るためのYes/Noフォームがあるページへ遷移する
    • 副管理者に対する「副管理者から降格」リンクから遷移できるページ (/community/removeSubAdmin/id/1/member_id/2) あるいは、
    • コミュニティメンバーに対する「退会させる」リンクから遷移できるページ (/community/removeSubAdmin/id/1/member_id/2) のどちらでもよい。
  4. メンバー管理画面に戻るための「いいえ」ボタンを押下する
  5. /default/error エラーページへ遷移する

原因

#1004 での 修正 によって、以下のルーティングが指定されており、

community_memberManage:
  url: /community/member/manage
  param: { module: community, action: memberManage }

このルーティングにマッチした上で、クエリストリングとしてパラメータを含めようとする。 /community/member/manage?id=1 のようなURLとなる。

GET method のフォームに対して action 属性値に ?id=xxx の形のクエリストリングが付与されたURLを渡すと、action 属性値のパラメータを無視する実装のUAが多いらしい。 関連記事(「form action クエリ」や「form action querystring」で検索すると記事がいくつか見つかる) [1] [2]

上記のルーティングが定義されていない場合は lib/routing/opSymfonyDefaultRouteCollection.class.php で

    $this->routes['default'] = new opDeprecatedRoute(
      '/:module/:action/*'
    );

のように定義されているルーティングにマッチし、 /community/memberManage/id/123 のようなURLとなり、パラメータが渡っていたため想定通りに動作していた。

修正内容

PC版、携帯版ともに、ルーティングの定義を

community_memberManage:
  url: /community/member/manage
  param: { module: community, action: memberManage }

から、id パラメータを含めた形

community_memberManage:
  url: /community/member/manage/:id
  param: { module: community, action: memberManage }
  requirements: { id: \d+ }

に変更する。

当該のYes/Noフォームにおいて、action 属性値に含まれるクエリストリングを input 要素などを介して渡すことでこの問題を回避することも可能だが、本質的な解決策ではない。

補足

この問題は #1004 での修正における書き換え時のミスだと思われる。

  • id を付加する必要性について
    • community/memberManage アクションは、特定の id のコミュニティのメンバー管理画面を表示するためのアクションである。つまり id を受け取ることを前提としている。
      • lib/action/opCommunityAction.class.php の preExecute() メソッドおよび executeMemberManage($request) を見れば明らかである。
  • ルーティング定義を変更してしまうことによる副作用はないか
    • id を受け取らない community/memberManage の呼び出しは前述のとおり想定されていないため、もしそのようなリンクがあったとしてもエラーページに飛ばされるだけである。
    • community/memberManage アクションを指すURL /community/member/manage (idを含まないURL)が無くなっても問題はないと判断している。

関連するチケット 2 (0件未完了2件完了)

関連している OpenPNE 3 - Bug(バグ) #2058: コミュニティのメンバー管理画面に戻るためのYes/Noフォームで「いいえ」を選ぶとアクセスエラーになるFixed(完了)Minoru Takai2011-05-06

操作
関連している OpenPNE 3 - Bug(バグ) #2093: 特定の端末によってはフォームのaction属性内のパラメータが引き継げずにエラー画面に遷移するInvalid(無効)2011-05-13

操作

Masato Nagasawa さんが13年以上前に更新

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

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

Masato Nagasawa さんが13年以上前に更新

更新履歴 96088864afe6cc90dd2a740cf6e6c4c4d259b94a で適用されました。

Masato Nagasawa さんが13年以上前に更新

  • ステータスPending Review(レビュー待ち) から New(新規) に変更
  • 担当者 を削除 (Masato Nagasawa)

3.4.12 では取り込みを行わないので、一旦取り消します。

Shinichi Urabe さんが13年以上前に更新

  • 対象バージョンOpenPNE 3.4.13 から OpenPNE 3.4.14 に変更

Masato Nagasawa さんが13年以上前に更新

3.4系ではルーティングルールが存在しないため、
action属性内にパラメータを含めていた場合でも正常に遷移できていました。

しかし、特定の携帯端末によっては、
action属性内にパラメータを含めている場合正常に引き継げない問題があるため、
携帯に関してはこの対応を適応するほうが良いと思われます。

Masato Nagasawa さんが13年以上前に更新

  • ステータスNew(新規) から Invalid(無効) に変更

#2093 にて携帯の問題に対するチケット作成しました。
このチケットは閉じます。

Minoru Takai さんが13年以上前に更新

  • 題名コミュニティの副管理者降格画面(/community/removeSubAdmin/id/:id/member_id/:id)で「いいえ」を選ぶとアクセスエラーになる から コミュニティのメンバー管理画面に戻るためのYes/Noフォームで「いいえ」を選ぶとアクセスエラーになる に変更

Minoru Takai さんが13年以上前に更新

この問題の原因が生じたのは #1004 でのコミットによるものですが、 #1004 は OpenPNE-3.5.2 に対する修正のため 3.4.x はこの問題が生じません。また、 #2058 で行った修正は #1004 での修正を補正するものであるため、 #1004 の修正が入っていないバージョンに対しては何も行う必要がありません。

Minoru Takai さんが13年以上前に更新

note-5, note-6 についてですが、

しかし、特定の携帯端末によっては、
action属性内にパラメータを含めている場合正常に引き継げない問題があるため、
携帯に関してはこの対応を適応するほうが良いと思われます。

少なくともコミュニティのメンバー管理画面周りについて、 #1004 の修正が入る前のバージョンにおいて action 属性内にクエリストリングを含むようなページは見当たりません。 #2093 は問題が不明瞭なためクローズします。

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