A chave do formulário de front-end está sendo substituída

11

No momento, estou tendo problemas com os formulários de front-end, onde as chaves do formulário estão sendo substituídas e exibindo chaves de formulário incorretas. No momento, estou depurando esse problema no formulário de login do cliente.

Este é um instantâneo do código em login.phtml, que eu configuro para ver qual é o valor do formkey.

  <?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 então agora depois que eu continuei a execução do código, ele renderiza a página com sucesso.

E agora vou inspecionar a entrada oculta da chave de formulário no meu navegador Chrome, no entanto, ela imprime uma chave de formulário totalmente diferente de ' KeyA '. Vamos nomear essa nova chave de formulário ' KeyB '.

Agora eu tento fazer um login e enviar o formulário. Inspecionei a solicitação que é enviada e, na verdade, ela passa uma variável de valor de chave de formulário que reflete 'KeyB'.

Coloquei alguns pontos de interrupção na função ' validar ' de

Magento \ Framework \ Dados \ Form \ FormKey \ Validator


Este é o meu verificador de comparação. À direita, $ formKey e $ a devem corresponder. No entanto, isso não acontece.

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


Assim, a validação falha e me redireciona de volta para a página de login sem nenhuma mensagem de erro .

Coisas a serem observadas:

  1. Esse comportamento ocorre apenas no chrome e no Microsoft EDGE.
  2. O Firefox funciona bem, nenhuma substituição está acontecendo
  3. A chave do formulário impressa parece estar mudando a cada atualização. $ retrievedKey não atualiza sempre

Coisas que tentei:

  1. setup: upgrade e setup: static-content: deploy
  2. var / cache limpo e var / generation
  3. cache do navegador limpo e modo de navegação anônima

Eu simplesmente não consigo entender por que a chave do formulário está sendo substituída?

Qualquer ajuda ou dicas sobre por que isso está acontecendo seria ótimo. Obrigado pela leitura

Atualização - Eu fiz alguma depuração e achei que o page-cache.js está causando o problema, definindo a chave do formulário novamente. Isso ocorre pelo fato de que ele está verificando meus cookies se um cookie 'form_key' estiver definido; caso contrário, crie uma nova chave de formulário e salve nos cookies. O problema é que não é possível salvar o cookie, é por isso que ele continua criando novas chaves de formulário.

Atualização - resolvi o problema. Isso ocorre devido a problemas no domínio de cookies. obrigado

Derek
fonte
Muito obrigado por documentar uma correção. Passado algum tempo depurando a questão de ver o mesmo comportamento - chave formulário é gerado de novo e de novo no front-end
Paras Sood
1
No meu caso, era o cache do sistema magento, pois foi migrado de um ambiente de teste. Armazenar -> Configurações -> Confguração -> Sistema -> Cache de Página Inteira -> Aplicativo de Cache: Defina como Cache Interno (se não tiver certeza se o verniz está ativado ou não).
Miguel Felipe Guillen Calo
Tendo exatamente o mesmo problema e estava olhando para as chaves do formulário na validação também. Você disse que isso ocorreu devido a problemas no domínio de cookies. Você pode compartilhar como corrigiu isso? Obrigado
Long MK Nguyễn

Respostas:

0

No meu caso, estou usando o localhost no URL para que a solução a seguir me ajude.

Se você estiver usando o host local em sua URL no computador local, substitua-o por IP.

Quero dizer, se o seu URL é

http: // localhost / Magento2 /

substitua-o por

http://127.0.0.1/Magento2/

Espero que funcione também para o Chrome & Edge e Firefox.

Shuvankar Paul
fonte