Je rencontre actuellement des problèmes avec les formulaires frontaux où les clés de formulaire sont en quelque sorte écrasées et affichent des clés de formulaire incorrectes. Je suis en train de déboguer ce problème sur le formulaire de connexion client.
Ceci est un instantané du code sur login.phtml, que j'ai configuré pour voir quelle est la valeur de la clé de formulaire.
<?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'.
?>
ok donc maintenant après avoir continué l'exécution du code, cela rend la page avec succès.
Et maintenant, je vais inspecter l'entrée cachée de la clé de formulaire sur mon navigateur Chrome, cependant, il imprime une clé de formulaire totalement différente de ' KeyA '. Appelons cette nouvelle clé de formulaire « KeyB ».
Maintenant, j'essaie de me connecter et de soumettre le formulaire. J'ai inspecté la demande qui est envoyée, et elle transmet en effet une variable clé de forme de valeur qui reflète «KeyB».
J'ai placé quelques points d'arrêt à la fonction « valider » de
Magento \ Framework \ Data \ Form \ FormKey \ Validator
Ceci est mon vérificateur de comparaison. À droite, $ formKey et $ a devraient correspondre. Mais ce n'est pas le cas.
$formKey = $request->getParam('form_key', null); // outputs 'KeyB'
$a = $this->_formKey->getFormKey(); // outputs 'KeyA'
Ainsi, la validation échoue et elle me redirige vers la page de connexion sans aucun message d'erreur .
A noter:
- Ce problème se produit uniquement dans Chrome et Microsoft EDGE.
- Firefox fonctionne bien, aucun écrasement ne se produit
- La clé de formulaire imprimée semble changer à chaque rafraîchissement. $ retrievedKey ne se rafraîchit pas à chaque fois
Ce que j'ai essayé:
- configuration: mise à niveau et configuration: contenu statique: déploiement
- var / cache et var / generation effacés
- cache du navigateur effacé et mode incognito
Je n'arrive pas à comprendre pourquoi la clé de formulaire est écrasée?
Toute aide ou indication sur la raison pour laquelle cela se produit serait formidable. Merci d'avoir lu
Mise à jour - J'ai effectué un débogage et j'ai pensé que page-cache.js était à l'origine du problème en définissant à nouveau la clé du formulaire. Cela est dû au fait que, il vérifie mes cookies si un cookie «form_key» est défini, sinon, créez une nouvelle clé de formulaire et enregistrez-le dans les cookies. Le problème est qu'il ne peut pas enregistrer le cookie, c'est pourquoi il continue de créer de nouvelles clés de formulaire.
Mise à jour - J'ai résolu le problème. Cela est dû à des problèmes de domaine des cookies. Merci
Réponses:
Pour mon cas, j'utilise localhost dans URL, donc la solution suivante m'aide.
Si vous utilisez localhost dans votre URL sur l'ordinateur local, remplacez-le par IP.
Je veux dire si votre URL est
http: // localhost / Magento2 /
remplacez-le par
http://127.0.0.1/Magento2/
J'espère que cela fonctionnera également pour Chrome & Edge et Firefox.
la source