みなさんこんばんわ。
僕のほうで調べた結果を報告します。
(ちょっと技術よりなので話が難しいかもです :’()
まず現象の発生方法です。
MODxでCAPTCHAの使用をONにするとmanagerの管理画面にCAPTCHAが表示されるようになります。
この画面にアクセスした時点でCAPTCHA情報がSESSION変数の$_SESSION[’veriword’]に保存されます。
基本的にSESSION変数はページを移動しても消える事はありません(ユーザ側、もしくはサーバ側が意図的に削除しない限り)。
次にWebLogin画面に移動します。
ユーザ名、パスワードを入力するとサーバ側で認証が開始されるのですが、SESSION変数$_SESSION[’veriword’]にCAPTCHA情報が入っているためCAPTCHAを使った認証が行われます。
しかし、WebLoginではユーザ名とパスワードしか入力していないのでこの認証が必ず失敗します。
そして失敗したと同時にサーバ側でSESSION変数の初期化が行われます。
すなわち$_SESSION[’veriword’]も削除されます。
そのため、2回目のログインではCAPTCHA認証が行われなくなり、結果としてログインが成功します。
以上が僕の確認した内容です。
解決方法は3つあります。
1.WebLoginスニペットのCAPTCHA機能をはずす
sama55さんの提示した解決方法です。
2.WebLoginもCAPTCHAを利用する。
CAPTCHA機能があるならWebLoginにも使う方法です。
MODxのセットアップ時にインストールできるサンプルサイトを例にして説明します。
チャンクFormLoginに以下のような行を追加します。
<label for="captcha_code">CAPTCHA : <input type="text" name="captcha_code" class="captcha_code" tabindex="3" size="20" /></label>
<a href="[+action+]"><img align="top" src="manager/includes/veriword.php" width="148" height="60" alt="CAPTCHA" style="border: 1px solid #039" /></a>
※追加する場所は<label for="password">〜</label>の下あたりでいいと思います。
※tabindexは適当に調整してください。
これでWebLoginでもCAPTCHA入力が出来るようになります。
3.WebLoginスニペットでCAPTCHA使用の有無をオプションで制御できるようにする。
MODxでCAPTCHAをONにするとWebloginにも影響が出てしまうので、WebLogin側でもCAPTCHAの使用をOn/OFF出来るようにオプションを追加します。
(確かJotでもやってるはずです)
変更方法はMODx0963で説明します。ちょっと適当ですが。。。
スニペットWebLoginの変更。
$tpl = isset($tpl)? $tpl:"";
$useCaptcha = isset($useCaptcha)? $useCaptcha:0; //←追加行
/assets/snippets/weblogin/weblogin.processor.inc.phpの変更
//if(isset($modx->config['use_captcha']) && $modx->config['use_captcha']==1) { //←コメントアウト
//if( !empty($useCaptcha) && isset($modx->config['use_captcha']) && $modx->config['use_captcha']==1) { //←追加
これでWebLoginでCAPTCHAの使用はOFFになります。
逆にCAPTCHAを利用したい場合はWebLoginスニペットに&useCaptcha=`1`を追加します。
本家への報告ですが、案3での報告がいいですかね?
ちなみに僕も英語が苦手なため、ちょっと時間ください :’(
明らかなバグ報告なら英語が通じなくてもphpソースで示せるのですが(笑)、こういう例だと英語できちんと説明しないとわかってもらえないですよね。。。