Backport(バックポート) #2681
完了パスワード再発行処理を行なおうとすると http://opauthmailaddress/ に飛ばされてしまう
0%
説明
Overview (現象)¶
1. 「パスワードを忘れた方へ」リンクよりパスワード再発行の申請を行う
2. パスワード再発行メールに
http://sns.example.com//opAuthMailAddress/passwordRecoveryComplete/token/hogehoge/id/XX
というURLが記載されているので、このURLにアクセスする
3. 新しいパスワード入力して、決定ボタンを押下すると、
http://opauthmailaddress/passwordRecoveryComplete/token/hogehoge/id/XX
というURLに飛ばされてしまう
元の報告:
http://twitter.com/77web/statuses/27406372500
確認バージョン¶
- 3.6beta6 再現した
- 3.4.20 発生せず
Minoru Takai さんが約13年前に更新
- 期日 を削除 (
2012-01-12) - 優先度 を High(高め) から Normal(通常) に変更
- 対象バージョン を OpenPNE 3.4.19 から OpenPNE 3.4.x に変更
この問題は OpenPNE-3.4 系では生じないようです。しかし、なぜ生じないのかについて調査しきれていません。
1. 「パスワードを忘れた方へ」リンクよりパスワード再発行の申請を行う 2. パスワード再発行メールに http://sns.example.com//opAuthMailAddress/passwordRecoveryComplete/token/hogehoge/id/XX というURLが記載されているので、このURLにアクセスする 3. 新しいパスワード入力して、決定ボタンを押下すると、 http://opauthmailaddress/passwordRecoveryComplete/token/hogehoge/id/XX というURLに飛ばされてしまう
- (1) この問題は 3.4 系では生じない
- 上記の再現手順 2 の問題は生じるが、手順 3 の問題は生じない
- (2) しかし元チケットと同等の修正を施しておくことが好ましいかもしれないし、そうでないかもしれない
- 元チケットでの修正は、上記手順 2 の問題(URLのパス部分の先頭が // で始まっている)が生じないように修正を行なっている
(1) の意味ではこのチケットをこのまま Invalid でクローズすべきですが、 (2) のことを考えると(調査が不完全なことも含めて)クローズしてしまうのは不適切な気がしています。バックポートチケットと元チケットの間で、チケットの設定値を同一にしておく必要があるかどうか分かりませんが、チケットの優先度を下げた上で OpenPNE-3.4.x 向けチケットとして残しておいたほうがよいのではないかと考えています。
Yuya Watanabe さんがほぼ13年前に更新
- ステータス を New(新規) から Accepted(着手) に変更
- 担当者 を Yuya Watanabe にセット
Yuya Watanabe さんがほぼ13年前に更新
3.6では発生して3.4では発生しない理由¶
form の action 属性値に与えられる url を生成する部分で 3.4 と 3.6 に違いが発生している.
具体的には以下の部分である.
3.4 の apps/pc_frontend/templates/_partsForm.php
3 $options->setDefault('url', url_for(sfContext::getInstance()->getRouting()->getCurrentInternalUri())); ... 14 <form action="<?php echo $options->getRaw('url') ?>" method="<?php echo $options['method'] ?>"<?php if (!empty($options['isMultipart'])): ?> enctype="multipart/form-data"<?php endif; ?>>
3.6 の apps/pc_frontend/templates/_partsForm.php
7 $options->setDefault('url', $sf_request->getCurrentUri()); ... 13 <form action="<?php echo $options->getRaw('url') ?>" method="<?php echo $options['method'] ?>"<?php if (!empty($options['isMultipart'])): ?> enctype="multipart/form-data"<?php endif; ?>>
3.4 で用いている sfContext::getInstance()->getRouting()->getCurrentInternalUri() では頭に付いている // の部分が省かれて取得され,正常に動作する.
しかし 3.6 の場合は $sf_request->getCurrentUri() では // が付与されたまま action 属性として表示してしまうため本チケットの問題が発生する.
問題発生場所¶
この修正は以下のチケットおよびコミットで変更されている.
#1004 「[Optimization] Decrease generating url by default rule (:module/:action) (デフォルトルール (:module/:action) による URL 生成を減らす)」
e8e250952e1dfaab11b0aceb7119a7afd968ff31
commit e8e250952e1dfaab11b0aceb7119a7afd968ff31 Author: Kousuke Ebihara <ebihara@tejimaya.com> Date: Mon May 10 18:47:48 2010 +0900 there are wrong fetching current URL with parameters in default value of parts (fixes #1004) diff --git a/apps/pc_frontend/templates/_partsForm.php b/apps/pc_frontend/templates/_partsForm.php index 5afa4d2..dbac137 100644 --- a/apps/pc_frontend/templates/_partsForm.php +++ b/apps/pc_frontend/templates/_partsForm.php @@ -4,10 +4,7 @@ $options->setDefault('method','post'); $options->setDefault('firstRow', ''); $options->setDefault('lastRow', ''); $options->setDefault('mark_required_field', true); -if (!isset($options['url'])) -{ - $options->setDefault('url', url_for(sfContext::getInstance()->getRouting()->getCurrentInternalUri())); -} +$options->setDefault('url', $sf_request->getCurrentUri()); ?> <?php if ($options['form'] instanceof opAuthRegisterForm): ?> <?php echo $options['form']->renderFormTag($options['url'], array('method' => $options['method'])) ?>
対応すべきかどうか¶
3.4 では #1004 は Enhancement であるため対応することは考えられない.
そのため本問題は発生しないと考えられ,Invalid とすることが正しいと判断できる.
Yuya Watanabe さんがほぼ13年前に更新
- ステータス を Accepted(着手) から Invalid(無効) に変更
note-5 より,本チケットを Invalid としてクローズします.