Ответы:
Ключи форм в Magento - это средство защиты от подделки межсайтовых запросов , короче говоря, она защищает вас от попыток людей опубликовать ваши формы (например, добавить в корзину) с других сайтов, изображающих вас.
Это может быть опасно, потому что кто-то теоретически может создать свою собственную форму и опубликовать любое действие контроллера обработчика формы в вашем магазине. Защита CSRF по существу игнорирует все сообщения, которые не проходят проверку включенного параметра form_key с сообщением формы.
<?php echo $this->getBlockHtml('formkey')?>
Он говорит Magento искать блок макета с именем «formkey» и выводить его. В Magento это обычно какой-то файл, в котором есть это:
<div><input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" /></div>
Это указывает Magento на вывод и сохранение уникального ключа формы для сеанса пользователя. Все действия контроллера Magento, защищенные CSRF, проверят это, прежде чем делать что-либо ценное.
\Magento\Framework\Data\Form\FormKey\Validator
.
Вы можете добавить форму ключом по этому коду:
<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$FormKey = $objectManager->get('Magento\Framework\Data\Form\FormKey');
?>
//Hidden form key field after <form> tag
<input name="form_key" type="hidden" value="<?php echo $FormKey->getFormKey();?>">
Если вы хотите добавить ключ формы в файл phtml, используйте прямой
$ This-> getFormKey ()
<input name="form_key" type="hidden" value="<?php echo $block->getFormKey();?>">
Использование Dependency Injection в вашем конструкторе классов:
protected $formKey;
public function __construct(
\Magento\Framework\Data\Form\FormKey $formKey
) {
$this->formKey = $formKey;
}
public function getFormKey()
{
return $this->formKey->getFormKey();
}
Примечание. Не используйте диспетчер объектов напрямую в файлах phtml.
ObjectManager
использование в веб-интерфейсе, это не очень хорошая практика.
Нет необходимости инициализировать диспетчер объектов и все, что вы можете использовать.
window.FORM_KEY
Фронтенд вы можете использовать:
$block->getKey()
Надеюсь это поможет!
Благодарность