Backport(バックポート) #2076
完了パスワード再発行処理を行なおうとすると http://opauthmailaddress/ に飛ばされてしまう
100%
説明
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 未確認
Causes (原因)¶
この問題は base_url に指定する URL の末尾に"/"を含めた場合に発生します。
2系では末尾に"/"が必須でしたが、3系はこれとは逆の仕様であると思われます。
したがって、この仕様について設定ファイル中に明記されていない事が問題であると思われます。
(2系では設定ファイル中にコメントアウトとして記述されています)
Way to fix (修正内容)¶
適切な対応としては、コメントに仕様を記述するよりも、
"/"が末尾に含まれる場合でも正常に動作する方が良いと思いますので、対応可能なように修正を行います。
OpenPNE.ymlがロードされるタイミング(opProjectConfiguration::setOpenPNEConfiguration())で、"/"が含まれていた場合に除去を行います。
この実装の場合、添付されているテストコードではsfConfigを直接書き換えているためエラーのままとなります。
また、op_base_url を書き換えた場合も"/"の除去は機能しません。
URL生成メソッドの opApplicationConfiguration::getAppRouting() 中に処理を記述することで対応は可能ですが、
この場合URL生成時に毎回処理を実行するため無駄な処理が走る事、他の箇所で参照されていた場合を考慮してこの実装は行いません。
(op_base_url を書き換えることは通常考えられない、この実装でも問題ないと考えます)