Actualmente tengo problemas con los formularios frontend en los que las claves del formulario se sobrescriben de alguna manera y muestran claves de formulario incorrectas. Actualmente estoy depurando este problema en el formulario de inicio de sesión del cliente.
Esta es una instantánea del código en login.phtml, que configuré para ver cuál es el valor de la clave de formulario.
<?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, así que después de continuar con la ejecución del código, muestra la página con éxito.
Y ahora voy a inspeccionar la entrada oculta de la clave de formulario en mi navegador Chrome, sin embargo, imprime una clave de formulario totalmente diferente de ' KeyA '. Vamos a nombrar esta nueva clave de formulario ' KeyB '.
Ahora intento iniciar sesión y enviar el formulario. Inspeccioné la solicitud que se envía y, de hecho, pasa una variable clave de valor de formulario que refleja 'KeyB'.
He colocado algunos puntos de interrupción en la función ' validar ' de
Magento \ Framework \ Data \ Form \ FormKey \ Validator
Este es mi verificador de comparación. Por derecho, $ formKey y $ a deberían coincidir. Sin embargo, no lo hace.
$formKey = $request->getParam('form_key', null); // outputs 'KeyB'
$a = $this->_formKey->getFormKey(); // outputs 'KeyA'
Por lo tanto, la validación falla y me redirige a la página de inicio de sesión sin ningún mensaje de error .
Cosas a tener en cuenta:
- Este comportamiento solo surge en Chrome y Microsoft EDGE.
- Firefox funciona bien, no se produce sobrescritura
- La clave de formulario que se imprime parece estar cambiando en cada actualización. Sin embargo, $ retrievedKey no se actualiza cada vez
Cosas que he probado:
- configuración: actualización y configuración: contenido estático: implementación
- borrado var / cache y var / generation
- borró el caché del navegador y el modo de incógnito
Simplemente no puedo entender por qué se sobrescribe la clave de formulario?
Cualquier ayuda o sugerencia sobre por qué esto está sucediendo sería genial. Gracias por leer
Actualización: he realizado algunas depuraciones y pensé que page-cache.js está causando el problema al configurar la clave de formulario nuevamente. Esto se debe al hecho de que está verificando mis cookies si se establece una cookie 'form_key'; de lo contrario, cree una nueva clave de formulario y guárdela en cookies. El problema es que no puede guardar la cookie, por eso sigue creando nuevas claves de formulario.
Actualización: he resuelto el problema. Esto se debe a problemas de dominio de cookies. Gracias
Respuestas:
Para mi caso, estoy usando localhost en URL, por lo que la siguiente solución me ayuda.
Si está utilizando localhost en su URL en la computadora local, entonces reemplácelo con IP.
Quiero decir si tu URL es
http: // localhost / Magento2 /
reemplazarlo con
http://127.0.0.1/Magento2/
Espero que funcione para Chrome & Edge y Firefox también.
fuente