WebLoginのパスワードの再発行についてです
modxをインストール後のサンプルサイトです
サンプルサイトには何も手を加えていません
(ウェブユーザーは作成しました)
作成したウェブユーザーでログイン
→OK
パスワードを忘れた場合の再発行の手続きをします
「パスワードをお忘れですか?」
→メールアドレス入れて再発行
→メールが来る
メーラーはThunderbirdを使っています
届いたメールに書かれている、再発行したパスワードを有効にするためのURLが
http://hoge.com/index?webloginmode=actp&wli=2&wlk=hogehoge
となっています
ここに飛んでも再発行されたパスワードが有効になりません
で、ヤフーのフリーメールだったので、ブラウザからヤフーメールを参照したら、上記URLが
http://hoge.com/index?webloginmode=actp&wli=2&wlk=hogehoge
となっていたのです
しかも、こちらだと再発行されたパスワードが有効になります
「&」を実体参照したURLとしてないURLとで結果が違ってしまうんです
原因がわかっているにもかかわらず、直し方がわかりません…ナサケナイ
いますぐ直さないと困るわけではないので(まだユーザーいないし)、お暇なときに解決方法を教えてください
WebLoginによるパスワードの再発行 【解決済み】
WebLoginによるパスワードの再発行 【解決済み】
**************************************************
shintata
http://shintata.com
http://rea.la
**************************************************
shintata
http://shintata.com
http://rea.la
**************************************************
Re: WebLoginによるパスワードの再発行
これってMODxの問題というよりブラウザの問題のような気がしますが、両者で違いが出るのは不思議ですね。文字実体参照でamp;に展開するほうがいちおうvalidということになっていて、MODx管理画面のグローバル設定「XHTML形式のURL」でもデフォルトで「はい」になってますが・・ここをとりあえず「いいえ」にしておくと参照変換オフで揃うと思います。
Re: WebLoginによるパスワードの再発行
yamaさんの対応方法でもいけることは確認しましたが、ちょっと影響が心配になりました。
局所的に対応するのであれば下でしょうか。(他にも数箇所ありそうですが。。。)
ソース : assets/snippets/weblogin/weblogin.common.inc.php (L62)
※manager/includes/controls/modxmailer.inc.phpのL69で一括して・・・とも思いましたが、メールの本文に" "や"&"があるとまずいですもんね。。。
局所的に対応するのであれば下でしょうか。(他にも数箇所ありそうですが。。。)
ソース : assets/snippets/weblogin/weblogin.common.inc.php (L62)
コード: 全て選択
// $message = str_replace("[+surl+]",$site_url,$message);
$message = str_replace("[+surl+]",htmlspecialchars_decode($site_url),$message);
Re: WebLoginによるパスワードの再発行
IE6~8、Firefox、Safari、Opera、Chrome(IE以外は最新版)で試してみました
実体参照のURL(amp;の方)だとダメ、実体参照じゃないURLだとOKでした
でもxml宣言したら実体参照しないとですしねぇ
weblogin.processor.inc.phpの104行目のとこにも同じ記述がありますがここも直しといた方が良いですかね?
(やっぱりPHP勉強しないとだめだなぁ…)
実体参照のURL(amp;の方)だとダメ、実体参照じゃないURLだとOKでした
僕もグローバル設定で「いいえ」にしたらOKになりましたsama55 さんが書きました:yamaさんの対応方法でもいけることは確認しましたが、ちょっと影響が心配になりました。
局所的に対応するのであれば下でしょうか。(他にも数箇所ありそうですが。。。)
ソース : assets/snippets/weblogin/weblogin.common.inc.php (L62)※manager/includes/controls/modxmailer.inc.phpのL69で一括して・・・とも思いましたが、メールの本文に" "や"&"があるとまずいですもんね。。。コード: 全て選択
// $message = str_replace("[+surl+]",$site_url,$message); $message = str_replace("[+surl+]",htmlspecialchars_decode($site_url),$message);
でもxml宣言したら実体参照しないとですしねぇ
weblogin.processor.inc.phpの104行目のとこにも同じ記述がありますがここも直しといた方が良いですかね?
(やっぱりPHP勉強しないとだめだなぁ…)
**************************************************
shintata
http://shintata.com
http://rea.la
**************************************************
shintata
http://shintata.com
http://rea.la
**************************************************
Re: WebLoginによるパスワードの再発行
modxmailerのクラスインスタンスを作ってる箇所で、site_urlを埋め込んでるところはすべてでしょうね。
(X)HTMLコード上では実体参照は必須だと思いますが、modxmailerでphpmailerをプレーンテキストで送出するようオーバーロードしてますから、グローバル設定に関わらずデコード("&"のみに)するのが正解のよ~な気がします(ちょっと自信ないです )。
メールをHTML形式で送れば問題ないのでしょうけど。。。
(X)HTMLコード上では実体参照は必須だと思いますが、modxmailerでphpmailerをプレーンテキストで送出するようオーバーロードしてますから、グローバル設定に関わらずデコード("&"のみに)するのが正解のよ~な気がします(ちょっと自信ないです )。
メールをHTML形式で送れば問題ないのでしょうけど。。。
Re: WebLoginによるパスワードの再発行
weblogin.common.inc.phpの62行目をご指示いただいた通りに修正したらうまくいきましたsama55 さんが書きました:modxmailerのクラスインスタンスを作ってる箇所で、site_urlを埋め込んでるところはすべてでしょうね。
(X)HTMLコード上では実体参照は必須だと思いますが、modxmailerでphpmailerをプレーンテキストで送出するようオーバーロードしてますから、グローバル設定に関わらずデコード("&"のみに)するのが正解のよ~な気がします(ちょっと自信ないです )。
メールをHTML形式で送れば問題ないのでしょうけど。。。
でも、weblogin.processor.inc.phpの104行目も直したらエラーになっちゃいました
コード: 全て選択
Fatal error: Call to undefined function: htmlspecialchars_decode() in /home/sites/●●●●●/assets/snippets/weblogin/weblogin.processor.inc.php on line 104
PHPのわからない僕には何が何だかさっぱり…
でもweblogin.common.inc.phpの修正で解決したので、しばらくはこのまま様子見ます
不都合が生じたらまた報告しますのでよろしくお願いします
ありがとうございました
**************************************************
shintata
http://shintata.com
http://rea.la
**************************************************
shintata
http://shintata.com
http://rea.la
**************************************************
Re: WebLoginによるパスワードの再発行
OKshintata さんが書きました:weblogin.common.inc.phpの62行目をご指示いただいた通りに修正したらうまくいきました
エラーの内容が奇妙ですね。。。shintata さんが書きました:でも、weblogin.processor.inc.phpの104行目も直したらエラーになっちゃいました元に戻したら大丈夫でしたコード: 全て選択
Fatal error: Call to undefined function: htmlspecialchars_decode() in /home/sites/●●●●●/assets/snippets/weblogin/weblogin.processor.inc.php on line 104
htmlspecialchars_decode()のかわりにhtml_entity_decode()にしたらどうでしょ?
htmlspecialchars_decode関数はPHP5.1.0以上の実装で、html_entity_decode関数はPHP4.3.0以上のようですので、広範囲な環境をカバーするhtml_entity_decodeの方が良さそうです。html_entity_decodeのデフォルトキャラクタセットはISO-8859-1(latin-1)ですが、このケースではURLにマルチバイト文字は入らないと思いますので、関数の差し替えだけで問題ないと思います(システムの修正時はちゃんとキャラクタセットを指定した方がイイでしょうね ^^;)。
類似問題が発生する可能性のある箇所は下の4箇所?("MODxMailer"でgrepし、global $site_url; や $modx->makeUrl()でパスを引用/生成してるところ)
assets\snippets\weblogin\weblogin.common.inc.php(67): $mail = new MODxMailer();
assets\snippets\weblogin\weblogin.processor.inc.php(110): $mail = new MODxMailer();
manager\processors\save_user.processor.php(469): $mail = new MODxMailer();
manager\processors\save_web_user.processor.php(419): $mail = new MODxMailer();