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:
- Dieses Verhalten tritt nur in Chrome und Microsoft EDGE auf.
- Firefox funktioniert einwandfrei, es erfolgt kein Überschreiben
- Der ausgedruckte Formularschlüssel scheint sich bei jeder Aktualisierung zu ändern. $ retrievedKey wird jedoch nicht jedes Mal aktualisiert
Dinge, die ich versucht habe:
- Setup: Upgrade und Setup: Statischer Inhalt: Bereitstellen
- Var / Cache und Var / Generation gelöscht
- 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
Antworten:
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.
quelle