フロントエンドフォームキーが上書きされています


11

現在、フォームキーが何らかの形で上書きされ、誤ったフォームキーが表示されるフロントエンドフォームに問題があります。私は現在、この問題をお客様のログインフォームでデバッグしています。

これは、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'


したがって、検証は失敗し、エラーメッセージなしでログインページにリダイレクトされます。

注意事項:

  1. この動作は、ChromeおよびMicrosoft EDGEでのみ発生します。
  2. Firefoxは正常に動作し、上書きは発生していません
  3. 印刷されるフォームキーは、更新するたびに変化するようです。$ retrievedKeyは毎回更新されません

私が試したこと:

  1. セットアップ:アップグレードとセットアップ:static-content:deploy
  2. var / cacheおよびvar / generationをクリアしました
  3. ブラウザのキャッシュとシークレットモードをクリアしました

なぜフォームキーが上書きされているのか頭に浮かばないのですか?

これがなぜ起こっているのかについての助けやヒントがあれば素晴らしいでしょう。読んでくれてありがとう

更新-デバッグをいくつか行いましたが、フォームキーを再度設定することにより、page-cache.jsが問題を引き起こしていることがわかりました。これは、「form_key」Cookieが設定されている場合はCookieをチェックし、設定されていない場合は、新しいフォームキーを作成してCookieに保存するためです。問題は、Cookieを保存できないことです。そのため、新しいフォームキーが作成され続けます。

更新-問題を解決しました。これはCookieドメインの問題が原因です。ありがとう


修正を文書化してくれてありがとう。同じ動作を見て問題をデバッグするのにしばらく費やしました-フォームキーがフロントエンドで何度も生成されます
Paras Sood

1
私の場合、ステージング環境から移行されたため、これはmagentoシステムキャッシュでした。ストア->設定->構成->システム->フルページキャッシュ->キャッシュアプ​​リケーション:ビルトインキャッシュに設定します(ワニスがアップしているかどうか不明な場合)。
ミゲルフェリペギレンカロ2018年

まったく同じ問題があり、検証でもフォームキーを調べていました。これはCookieドメインの問題が原因であるとおっしゃっていましたが、それをどのように修正したか教えていただけますか?ありがとう
Long

回答:


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.