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


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:


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.