現在、フォームキーが何らかの形で上書きされ、誤ったフォームキーが表示されるフロントエンドフォームに問題があります。私は現在、この問題をお客様のログインフォームでデバッグしています。
これは、login.phtmlのコードのスナップショットです。formkeyの値を確認するために設定しました。
<?php
$retrievedKey = $block->getBlockHtml('formkey');
echo $retrievedKey ;
// i made a breakpoint and inspected $retrievedKey, it returned a html output <input> ... </input> with a form key value of, let's name it 'keyA'.
?>
わかりましたので、コードの実行を続けた後、ページが正常にレンダリングされます。
クロームブラウザーでフォームキーの非表示の入力を検査しますが、 ' KeyA ' とはまったく異なるフォームキーを出力します。この新しいフォームキーに「KeyB」という名前を付けます。
次に、ログインしてフォームを送信します。送信されたリクエストを調べたところ、確かに「KeyB」を反映した値のフォームキー変数が渡されました。
の「検証」機能にいくつかのブレークポイントを配置しました
Magento \ Framework \ Data \ Form \ FormKey \ Validator
これは私の比較チェッカーです。当然、$ formKeyと$ aは一致するはずです。ただし、そうではありません。
$formKey = $request->getParam('form_key', null); // outputs 'KeyB'
$a = $this->_formKey->getFormKey(); // outputs 'KeyA'
したがって、検証は失敗し、エラーメッセージなしでログインページにリダイレクトされます。
注意事項:
- この動作は、ChromeおよびMicrosoft EDGEでのみ発生します。
- Firefoxは正常に動作し、上書きは発生していません
- 印刷されるフォームキーは、更新するたびに変化するようです。$ retrievedKeyは毎回更新されません
私が試したこと:
- セットアップ:アップグレードとセットアップ:static-content:deploy
- var / cacheおよびvar / generationをクリアしました
- ブラウザのキャッシュとシークレットモードをクリアしました
なぜフォームキーが上書きされているのか頭に浮かばないのですか?
これがなぜ起こっているのかについての助けやヒントがあれば素晴らしいでしょう。読んでくれてありがとう
更新-デバッグをいくつか行いましたが、フォームキーを再度設定することにより、page-cache.jsが問題を引き起こしていることがわかりました。これは、「form_key」Cookieが設定されている場合はCookieをチェックし、設定されていない場合は、新しいフォームキーを作成してCookieに保存するためです。問題は、Cookieを保存できないことです。そのため、新しいフォームキーが作成され続けます。
更新-問題を解決しました。これはCookieドメインの問題が原因です。ありがとう