Respuestas:
Las claves de formulario en Magento son un medio para prevenir la falsificación de solicitudes de sitios cruzados , en resumen, es para mantenerlo a salvo de las personas que intentan publicar en sus formularios (como agregar al carrito) desde otros sitios que se hacen pasar por usted.
Esto puede ser peligroso porque alguien teóricamente podría crear su propio formulario y publicarlo en cualquier acción de controlador de controlador de formulario en su tienda. La protección CSRF esencialmente ignora cualquier publicación que falle una verificación en el parámetro form_key incluido con la publicación del formulario.
<?php echo $this->getBlockHtml('formkey')?>
Le dice a Magento que busque un bloque de diseño con el nombre "formkey" y lo muestre. En Magento, este suele ser un archivo que contiene esto:
<div><input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" /></div>
Esto le indica a Magento que genere y almacene una clave de formulario única para una sesión de usuario. Todas las acciones del controlador Magento protegidas por CSRF verificarán esto antes de hacer algo de valor.
\Magento\Framework\Data\Form\FormKey\Validator
.
Puede agregar 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();?>">
Si desea agregar la clave de formulario en el archivo phtml, use direct
$ this-> getFormKey ()
<input name="form_key" type="hidden" value="<?php echo $block->getFormKey();?>">
Usando la inyección de dependencia en el constructor de tu clase:
protected $formKey;
public function __construct(
\Magento\Framework\Data\Form\FormKey $formKey
) {
$this->formKey = $formKey;
}
public function getFormKey()
{
return $this->formKey->getFormKey();
}
Nota: No use el administrador de objetos directamente en archivos phtml
ObjectManager
uso en la interfaz, esto no es una buena práctica.
No hay necesidad de inicializar el administrador de objetos y todo lo que puede usar.
window.FORM_KEY
Frontend puede usar:
$block->getKey()
¡Espero que esto ayude!
Gracias