La clé du formulaire frontal est écrasée

11

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:

  1. Ce problème se produit uniquement dans Chrome et Microsoft EDGE.
  2. Firefox fonctionne bien, aucun écrasement ne se produit
  3. La clé de formulaire imprimée semble changer à chaque rafraîchissement. $ retrievedKey ne se rafraîchit pas à chaque fois

Ce que j'ai essayé:

  1. configuration: mise à niveau et configuration: contenu statique: déploiement
  2. var / cache et var / generation effacés
  3. 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

Derek
la source
Merci beaucoup d'avoir documenté un correctif. A passé du temps à déboguer le problème en voyant le même comportement - la clé de formulaire est générée encore et encore sur le front-end
Paras Sood
1
Dans mon cas, c'était le cache du système magento, car il a été migré à partir d'un env intermédiaire. Store -> Settings -> Confguration -> System -> Full Page Cache -> Caching Application: Set to Built-in Cache (if not sure sure vernish is up or not).
Miguel Felipe Guillen Calo
Ayant exactement le même problème et examinait également les clés de formulaire lors de la validation. Vous avez dit que cela était dû à des problèmes de domaine des cookies, pouvez-vous partager la façon dont vous avez résolu cela? Merci
Long MK Nguyễn

Réponses:

0

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.

Shuvankar Paul
la source