Klucz formularza interfejsu użytkownika jest zastępowany

11

Mam obecnie problemy z formularzami frontendowymi, w których klucze formularzy są w jakiś sposób nadpisywane i wyświetlają nieprawidłowe klucze formularzy. Obecnie debuguję ten problem w formularzu logowania klienta.

To jest migawka kodu z login.phtml, który skonfigurowałem, aby zobaczyć, co to jest wartość 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, więc teraz, po kontynuowaniu wykonywania kodu, strona renderuje się pomyślnie.

A teraz idę sprawdzić ukryty klucz formularza w mojej przeglądarce Chrome, jednak drukuje on zupełnie inny klucz formularza niż „ KeyA ”. Nazwijmy ten nowy klucz formularza „ KeyB ”.

Teraz próbuję zalogować się i przesłać formularz. Sprawdziłem przesłane żądanie i rzeczywiście przekazuje ono zmienną kluczową o wartości, która odzwierciedla „KeyB”.

Umieściłem niektóre punkty przerwania w funkcji „ sprawdzania poprawności

Magento \ Framework \ Data \ Form \ FormKey \ Validator


To jest mój tester porównawczy. Po prawej, $ formKey i $ a powinny się zgadzać. Jednak tak nie jest.

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


Dlatego sprawdzanie poprawności kończy się niepowodzeniem i przekierowuje mnie z powrotem do strony logowania bez żadnego komunikatu o błędzie .

Ważne uwagi:

  1. Takie zachowanie występuje tylko w Chrome i Microsoft EDGE.
  2. Firefox działa dobrze, nie ma miejsca nadpisywanie
  3. Wydaje się, że wydrukowany klucz formularza zmienia się przy każdym odświeżeniu. $ retrievedKey nie jest jednak odświeżany za każdym razem

Rzeczy, których próbowałem:

  1. setup: uaktualnij i setup: static-content: deploy
  2. wyczyszczono var / cache i var / generation
  3. wyczyszczono pamięć podręczną przeglądarki i tryb incognito

Po prostu nie mogę się zastanowić, dlaczego klucz formularza jest zastępowany?

Jakakolwiek pomoc lub wskazówki, dlaczego tak się dzieje, byłyby świetne. Dziękuje za przeczytanie

Aktualizacja - wykonałem kilka debugowania i doszedłem do wniosku, że przyczyną strony jest cache.js, ustawiając ponownie klucz formularza. Wynika to z faktu, że sprawdza moje pliki cookie, czy plik cookie „form_key” jest ustawiony, jeśli nie, utwórz nowy klucz formularza i zapisz w plikach cookie. Problem polega na tym, że nie jest w stanie zapisać pliku cookie, dlatego ciągle tworzy nowe klucze formularza.

Aktualizacja - rozwiązałem problem. Wynika to z problemów z domeną plików cookie. Dzięki

Derek
źródło
Wielkie dzięki za udokumentowanie poprawki. Spędziłem trochę czasu na debugowaniu problemu, widząc to samo zachowanie - klucz formularza jest generowany wielokrotnie w interfejsie
Paras Sood
1
W moim przypadku była to pamięć podręczna systemu Magento, ponieważ została migrowana z env. Zapisz -> Ustawienia -> Konfiguracja -> System -> Pełna pamięć podręczna stron -> Aplikacja buforująca: Ustaw na wbudowaną pamięć podręczną (jeśli nie masz pewności, czy lakier jest gotowy).
Miguel Felipe Guillen Calo
Miałem dokładnie ten sam problem i sprawdzałem także klucze formularzy podczas sprawdzania poprawności. Powiedziałeś, że było to spowodowane problemami z domeną plików cookie. Czy możesz podzielić się tym, jak to naprawiłeś? Dzięki
Długi MK Nguyễn

Odpowiedzi:

0

W moim przypadku używam localhost w adresie URL, więc poniższe rozwiązanie pomaga mi.

Jeśli używasz localhost w adresie URL na komputerze lokalnym, więc zastąp go adresem IP.

Mam na myśli, jeśli masz adres URL

http: // localhost / Magento2 /

zastąp to

http://127.0.0.1/Magento2/

Mam nadzieję, że zadziała również w Chrome & Edge i Firefox.

Shuvankar Paul
źródło