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:
- Takie zachowanie występuje tylko w Chrome i Microsoft EDGE.
- Firefox działa dobrze, nie ma miejsca nadpisywanie
- 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:
- setup: uaktualnij i setup: static-content: deploy
- wyczyszczono var / cache i var / generation
- 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
Odpowiedzi:
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.
źródło