Respostas:
As chaves de formulário no Magento são um meio de impedir a falsificação de solicitação entre sites . Em resumo, é para protegê-lo das pessoas que tentam postar em seus formulários (como adicionar ao carrinho) de outros sites que se apresentam como você.
Isso pode ser perigoso, porque alguém poderia teoricamente criar seu próprio formulário e publicar em qualquer ação do controlador de manipulador de formulários em sua loja. A proteção CSRF basicamente ignora qualquer publicação que falhe na verificação do parâmetro form_key incluído na publicação de formulário.
<?php echo $this->getBlockHtml('formkey')?>
Ele diz ao Magento para procurar um bloco de layout com o nome "formkey" e enviá-lo. No Magento, isso geralmente é um arquivo que contém isso:
<div><input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" /></div>
Isso instrui o Magento a produzir e armazenar uma chave de formulário exclusiva para uma sessão do usuário. Todas as ações do controlador Magento protegidas por CSRF serão verificadas contra isso antes de fazer qualquer coisa de valor.
\Magento\Framework\Data\Form\FormKey\Validator
.
Você pode adicionar formkey por este código:
<?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();?>">
Se você deseja adicionar uma chave de formulário no arquivo phtml, use direct
$ this-> getFormKey ()
<input name="form_key" type="hidden" value="<?php echo $block->getFormKey();?>">
Usando Injeção de Dependência no seu construtor de classe:
protected $formKey;
public function __construct(
\Magento\Framework\Data\Form\FormKey $formKey
) {
$this->formKey = $formKey;
}
public function getFormKey()
{
return $this->formKey->getFormKey();
}
Nota: Não use o gerenciador de objetos diretamente nos arquivos phtml
ObjectManager
uso no front-end. Essa não é uma boa prática.
Não há necessidade de inicializar o gerenciador de objetos e tudo, você pode usar.
window.FORM_KEY
Frontend você pode usar:
$block->getKey()
Espero que isto ajude!
obrigado