La clave de formulario de la interfaz se sobrescribe

11

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:

  1. Este comportamiento solo surge en Chrome y Microsoft EDGE.
  2. Firefox funciona bien, no se produce sobrescritura
  3. 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:

  1. configuración: actualización y configuración: contenido estático: implementación
  2. borrado var / cache y var / generation
  3. 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

Derek
fuente
Muchas gracias por documentar una solución. Pasé algún tiempo depurando el problema viendo el mismo comportamiento: la clave de formulario se genera una y otra vez en el front-end
Paras Sood
1
En mi caso, era el caché del sistema magento, ya que se migró desde un entorno de almacenamiento provisional. Almacenar -> Configuración -> Configuración -> Sistema -> Caché de página completa -> Aplicación de almacenamiento en caché: establecer en caché incorporado (si no está seguro de si el barniz está activo o no).
Miguel Felipe Guillén Calo
Al tener exactamente el mismo problema y también estaba mirando las claves de formulario en la validación. Dijiste que esto se debió a problemas con el dominio de las cookies, ¿puedes compartir cómo lo arreglaste? Gracias
Long MK Nguyễn

Respuestas:

0

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.

Shuvankar Paul
fuente