Ключ формы внешнего интерфейса перезаписывается


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'.
  ?>

Хорошо, теперь, после того как я продолжил выполнение кода, он успешно отображает страницу.

И теперь я иду, чтобы проверить скрытый ввод ключа формы в моем браузере Chrome, однако, он выводит совершенно другой ключ формы от « KeyA ». Давайте назовем этот новый ключ формы « KeyB ».

Теперь я пытаюсь сделать логин и отправить форму. Я проверил запрос, который был отправлен, и он действительно передает переменную ключа формы со значением, которое отражает «KeyB».

Я установил некоторые контрольные точки в функции « validate »

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. setup: обновление и настройка: static-content: deploy
  2. очищенные вар / кеш и вар / генерация
  3. очищен кеш браузера и режим инкогнито

Я просто не могу понять, почему ключ формы перезаписывается?

Любая помощь или намеки на то, почему это происходит, было бы здорово. Спасибо за чтение

Обновление - я выполнил некоторую отладку, и я подумал, что page-cache.js вызывает проблему, снова установив ключ формы. Это связано с тем, что он проверяет мои куки, если установлен cookie «form_key», если нет, создайте новый ключ формы и сохраните его в куки. Проблема в том, что он не может сохранить куки, поэтому он продолжает создавать новые ключи формы.

Обновление - я решил проблему. Это связано с проблемами домена cookie. Спасибо


Большое спасибо за документирование исправления. Потратил некоторое время на отладку проблемы, наблюдая за тем же поведением - снова и снова генерируется ключ формы
Paras Sood

1
В моем случае это был системный кеш magento, так как он был перенесен из промежуточной среды. Магазин -> Настройки -> Конфигурация -> Система -> Кэш полной страницы -> Кэширование приложения: Установите встроенный кэш (если вы не уверены, работает ли лак или нет).
Мигель Фелипе Гильен Кало

Имея точно такую ​​же проблему и искал ключи формы в валидации. Вы сказали, что это из-за проблем с доменом cookie, можете рассказать, как вы это исправили? Спасибо
Long MK Nguyễn

Ответы:


0

В моем случае я использую localhost в URL, поэтому мне помогает следующее решение.

Если вы используете localhost в своем URL на локальном компьютере, то замените его на IP.

Я имею в виду, если ваш URL

HTTP: // локальный / Magento2 /

заменить его на

http://127.0.0.1/Magento2/

Надеюсь, это будет работать и для Chrome & Edge и Firefox.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.