Der Frontend-Formularschlüssel wird überschrieben

11

Ich habe derzeit Probleme mit Frontend-Formularen, bei denen die Formularschlüssel irgendwie überschrieben werden und falsche Formularschlüssel angezeigt werden. Ich debugge derzeit dieses Problem im Kundenanmeldeformular.

Dies ist eine Momentaufnahme des Codes unter login.phtml, den ich eingerichtet habe, um zu sehen, wie hoch der Formularschlüsselwert ist.

  <?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, jetzt, nachdem ich die Codeausführung fortgesetzt habe, wird die Seite erfolgreich gerendert.

Und jetzt überprüfe ich die versteckte Eingabe des Formularschlüssels in meinem Chrome-Browser. Es wird jedoch ein völlig anderer Formularschlüssel als ' KeyA ' ausgedruckt . Nennen wir diesen neuen Formularschlüssel ' KeyB '.

Jetzt versuche ich mich einzuloggen und sende das Formular. Ich habe die übermittelte Anforderung überprüft und sie übergibt tatsächlich eine Formularschlüsselvariable mit dem Wert 'KeyB'.

Ich habe einige Haltepunkte bei der ' Validate' -Funktion von platziert

Magento \ Framework \ Data \ Form \ FormKey \ Validator


Dies ist mein Vergleichsprüfer. Zu Recht sollten $ formKey und $ a übereinstimmen. Dies ist jedoch nicht der Fall.

 $formKey = $request->getParam('form_key', null); // outputs 'KeyB'
 $a = $this->_formKey->getFormKey(); // outputs 'KeyA'


Daher schlägt die Validierung fehl und leitet mich ohne Fehlermeldung zurück zur Anmeldeseite .

Dinge zu beachten:

  1. Dieses Verhalten tritt nur in Chrome und Microsoft EDGE auf.
  2. Firefox funktioniert einwandfrei, es erfolgt kein Überschreiben
  3. Der ausgedruckte Formularschlüssel scheint sich bei jeder Aktualisierung zu ändern. $ retrievedKey wird jedoch nicht jedes Mal aktualisiert

Dinge, die ich versucht habe:

  1. Setup: Upgrade und Setup: Statischer Inhalt: Bereitstellen
  2. Var / Cache und Var / Generation gelöscht
  3. Browser-Cache und Inkognito-Modus gelöscht

Ich kann einfach nicht verstehen, warum der Formularschlüssel überschrieben wird.

Jede Hilfe oder Hinweise, warum dies geschieht, wäre großartig. Danke fürs Lesen

Update - Ich habe einige Fehlerbehebungen durchgeführt und festgestellt, dass page-cache.js das Problem verursacht, indem der Formularschlüssel erneut festgelegt wurde. Dies liegt an der Tatsache, dass meine Cookies überprüft werden, wenn ein 'form_key'-Cookie gesetzt ist. Wenn nicht, erstellen Sie einen neuen Formularschlüssel und speichern Sie ihn in Cookies. Das Problem ist, dass das Cookie nicht gespeichert werden kann. Deshalb werden immer wieder neue Formularschlüssel erstellt.

Update - Ich habe das Problem gelöst. Dies ist auf Probleme mit der Cookie-Domain zurückzuführen. Vielen Dank

Derek
quelle
Vielen Dank für die Dokumentation eines Fixes. Verbrachte einige Zeit damit, das Problem zu debuggen und das gleiche Verhalten zu sehen - der Formularschlüssel wird immer wieder im Front-End generiert
Paras Sood
1
In meinem Fall war es der Magento-System-Cache, da er von einer Staging-Umgebung migriert wurde. Speichern -> Einstellungen -> Konfiguration -> System -> Ganzseiten-Cache -> Caching-Anwendung: Auf integrierten Cache setzen (wenn Sie nicht sicher sind, ob der Lack aktiv ist oder nicht).
Miguel Felipe Guillen Calo
Ich hatte genau das gleiche Problem und habe mir auch die Formularschlüssel bei der Validierung angesehen. Sie sagten, dies sei auf Probleme mit der Cookie-Domain zurückzuführen. Können Sie uns mitteilen, wie Sie das behoben haben? Vielen Dank
Long MK Nguyễn

Antworten:

0

In meinem Fall verwende ich localhost in der URL, daher hilft mir die folgende Lösung.

Wenn Sie localhost in Ihrer URL auf dem lokalen Computer verwenden, ersetzen Sie es durch IP.

Ich meine, wenn Ihre URL ist

http: // localhost / Magento2 /

Ersetzen Sie es durch

http://127.0.0.1/Magento2/

Hoffe, es wird auch für Chrome & Edge und Firefox funktionieren.

Shuvankar Paul
quelle