В настоящее время у меня возникают проблемы с формами внешнего интерфейса, когда ключи форм каким-то образом перезаписываются и отображаются неправильные ключи форм. В настоящее время я отлаживаю эту проблему в форме входа клиента.
Это снимок кода в 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'
Таким образом, проверка не пройдена, и она перенаправляет меня обратно на страницу входа без каких-либо сообщений об ошибках .
Что следует отметить:
- Такое поведение возникает только в Chrome и Microsoft EDGE.
- Firefox работает нормально, перезаписи не происходит
- Кажется, что ключ формы, который выводится на печать, меняется при каждом обновлении. Хотя $ retrievedKey не обновляется каждый раз
Вещи, которые я пробовал:
- setup: обновление и настройка: static-content: deploy
- очищенные вар / кеш и вар / генерация
- очищен кеш браузера и режим инкогнито
Я просто не могу понять, почему ключ формы перезаписывается?
Любая помощь или намеки на то, почему это происходит, было бы здорово. Спасибо за чтение
Обновление - я выполнил некоторую отладку, и я подумал, что page-cache.js вызывает проблему, снова установив ключ формы. Это связано с тем, что он проверяет мои куки, если установлен cookie «form_key», если нет, создайте новый ключ формы и сохраните его в куки. Проблема в том, что он не может сохранить куки, поэтому он продолжает создавать новые ключи формы.
Обновление - я решил проблему. Это связано с проблемами домена cookie. Спасибо
Ответы:
В моем случае я использую localhost в URL, поэтому мне помогает следующее решение.
Если вы используете localhost в своем URL на локальном компьютере, то замените его на IP.
Я имею в виду, если ваш URL
HTTP: // локальный / Magento2 /
заменить его на
http://127.0.0.1/Magento2/
Надеюсь, это будет работать и для Chrome & Edge и Firefox.
источник