Réponses:
Les clés de formulaire dans Magento sont un moyen de prévenir la contrefaçon de demande intersite , en bref, c'est pour vous protéger des personnes qui tentent de poster sur vos formulaires (comme ajouter au panier) d'autres sites se faisant passer pour vous.
Cela peut être dangereux car quelqu'un pourrait théoriquement créer son propre formulaire et le publier dans n'importe quelle action de contrôleur de gestionnaire de formulaire dans votre magasin. La protection CSRF ignore essentiellement toute publication qui échoue à la vérification du paramètre form_key inclus avec la publication de formulaire.
<?php echo $this->getBlockHtml('formkey')?>
Il indique à Magento de rechercher un bloc de mise en page avec le nom "formkey" et de le sortir. Dans Magento, c'est généralement un fichier qui contient ceci:
<div><input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" /></div>
Cela demande à Magento de générer et de stocker une clé de formulaire unique pour une session utilisateur. Toutes les actions du contrôleur Magento protégées par CSRF le vérifieront avant de faire quoi que ce soit de valeur.
\Magento\Framework\Data\Form\FormKey\Validator
.
Vous pouvez ajouter formkey par ce code:
<?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 vous souhaitez ajouter une clé de formulaire dans un fichier phtml, utilisez directement
$ this-> getFormKey ()
<input name="form_key" type="hidden" value="<?php echo $block->getFormKey();?>">
Utilisation de l'injection de dépendance dans votre constructeur de classe:
protected $formKey;
public function __construct(
\Magento\Framework\Data\Form\FormKey $formKey
) {
$this->formKey = $formKey;
}
public function getFormKey()
{
return $this->formKey->getFormKey();
}
Remarque: N'utilisez pas le gestionnaire d'objets directement dans les fichiers phtml
ObjectManager
utilisation en frontend ce n'est pas une bonne pratique.
Il n'est pas nécessaire d'initialiser le gestionnaire d'objets et tout ce que vous pouvez utiliser.
window.FORM_KEY
Frontend, vous pouvez utiliser:
$block->getKey()
J'espère que cela t'aides!
Merci