Logowanie klienta nie działa w wersji 1.9

42

Właśnie wykonałem nową instalację Magento 1.9.0.1 i widzę bardzo dziwne zachowanie w formularzu logowania klienta.

W Chrome (wersja 36) formularz logowania nie działa. Właśnie przekierowano mnie na stronę logowania. Brak komunikatu o błędzie. Jednak po otwarciu nowego okna incognito mogę się zalogować. Myśląc, że to był problem z plikami cookie, usunąłem wszystkie moje pliki cookie z przeglądarki, spróbowałem ponownie i uzyskałem te same wyniki. W obu przypadkach jestem w stanie zalogować się do panelu administracyjnego bez żadnych problemów.

Próbowałem tego również w przeglądarce Firefox i Safari. Firefox Widziałem to samo (ale nie konsekwentnie i mogłem to naprawić, usuwając pliki cookie) i nie mogłem replikować w Safari.

Nigdy nie miałem z tym problemu w żadnej innej wersji Magento. Czy istnieje jakaś fundamentalna zmiana w sposobie, w jaki Magento obsługuje pliki cookie w wersji 1.9 i / lub czy jest coś, co mogę zrobić, aby uczynić to bardziej stabilnym?

Josh Pennington
źródło
czy możesz udostępnić link i przetestować użytkownika / hasło
MTM
Niestety wszystko jest powiązane z VPN mojej pracy.
Josh Pennington,
Zainstaluj ponownie Chrome i sprawdź.
Niloct,
Te same wyniki po ponownej instalacji.
Josh Pennington,
1
Kiedyś miałem podobny problem w witrynie klienta, problem polegał na tym, że dostęp do witryny był możliwy bez wwwnp abc.com. przekierowania do niego www.abc.com. W tym przypadku przeglądarka wwwustawiała pliki cookie dla obu i loginy specjalnie przestały działać, ale jeśli ręcznie usunę ciasteczko, które nie było logowań, zacznę ponownie działać. Czy możesz sprawdzić, czy to samo dotyczy Ciebie?
MTM

Odpowiedzi:

38

Miałem ten sam problem ....

Odpowiedź jest taka, że ​​Twój motyw nie zawiera zmiennej o nazwie form_key.

Tak jak stwierdzono powyżej, muszę dodać:

<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />

dodajesz go zaraz po <ul class="form-list">

do każdego z moich login.phtmlplików motywu.

Możesz także mieć problemy z aktualizacją ilości produktów w koszyku

Oto znaczenie form_keys:

Od samego początku backend Magento zawierał klucz formularza, który chronił przed atakami XSS [1]. W Magento 1.8 klucz formularza wszedł do interfejsu z prawie tego samego powodu: w celu ochrony przed przesłaniem formularza z innej strony internetowej za pomocą przeglądarki. złośliwy atakujący może dodawać elementy do koszyka, gdy jesteś w innej karcie przeglądarki, a nawet realizować dla Ciebie zamówienie. Zależy to od przewidywalnych adresów URL, ponieważ witryna nie będzie miała dostępu do rzeczywistej zawartości HTML na karcie przeglądarki, na której czeka Twoje zamówienie Magento. Wszystko wysyłane do sklepu Magento prześle jednak pliki cookie, a tym samym wykorzysta sesję.

Dodając unikalny klucz do każdego formularza lub do każdego linku generującego akcję na serwerze, adres URL lub treść formularza nie są już przewidywalne. Klucz formularza jest przechowywany w danych sesji i sprawdzany po przesłaniu do serwera. Jeśli się nie zgadzają, pojawia się błąd klucza formularza i działanie nie zostało zakończone.

BWalt
źródło
3
Dodaj powyższy ukryty wpis „form_key” do formularza znajdującego się: app / design / frontend / base / default / template / permanentent / checkout / onepage / login.phtml
Flipmedia
5
Znacznie lepszym fragmentem kodu do użycia byłoby <?php echo $this->getBlockHtml('formkey'); ?>raczej niż duże wejście.
Navarr,
Wklej to przed tagiem zamykającym formularz <? Php echo $ this-> getBlockHtml ('formkey'); ?>
Tahir Yasin
piękne, to działało dla mnie. Dziękuję bardzo, głosowałem!
CodingMageSheen
Łał, szukałem tego tak długo>. <! Wielkie dzięki!
Keenora Fluffball
8

Może być:

cookie setting issue in Chrome browser

LUB

Magento 1.9 używa form key validation at customer loggin and registerstrony.

Na Post actionnim sprawdź klucz formularza using function _validateFormKey()na kontrolerze

form key issue: form key missing więc dodaj ten kod w swoim formularzu

<input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" />

LUB

Cookie domain setting issue Goto Check ustawienie jest prawidłowe lub nie

w Admin>System>configuration>General>Web>Session Cookie Management

Amit Bera
źródło
1
Formularz logowania ma już pole form_key, a ja ustawiłem domenę plików cookie, która również tego nie naprawiła.
Josh Pennington,
usuń plik cookie z przeglądarki Lub przejdź do accountcontroller.php sprawdź, czy (! $ this -> _ validateFormKey ()) {działa, czy nie
Amit Bera
Klucz formularza jest poprawnie sprawdzany. W rzeczywistości wygląda na to, że loginPostAction działa idealnie dobrze.
Josh Pennington,
1
@AmitBera Mam się z tobą spotkać na czacie magento? Mam problem związany z modułem listy życzeń?
Butterfly
@AmitBera Ustawiłem klucz, ale nadal nie działa. Również w accountcontroller.php if (!$this->_validateFormKey()) {zwraca false, co oznacza, że ​​Magento nie może zweryfikować dostarczonego klucza. Każdy pomysł, dlaczego tak się dzieje?
Arvind07
6

Ponieważ wydaje się, że problem dotyczy plików cookie, spróbuj wydłużyć czas życia pliku cookie do 86400 poniżej

Sytem -> Configuration -> Web -> Session and Cookie Management


Przyczyną może być domyślnie czas życia ciasteczka ustawiony na 3600 (1 godzina). Ale jeśli czas komputera użytkowników końcowych upłynie przed czasem serwera, pliki cookie nie zostaną ustawione dla frontonu Magento, jak również dla backendu. Na przykład czas komputera użytkownika końcowego jest o 1 godzinę do przodu niż czas serwera, co oznacza, że ​​plik cookie (identyfikator sesji użytkownika) wygaśnie, gdy tylko użytkownik zaloguje się lub spróbuje dodać element.

Anshu Mishra
źródło
4

Dla przyszłych czytelników: Istnieje wiele możliwych przyczyn tego problemu. Podczas logowania niektóre wyjątki są pomijane ze względów bezpieczeństwa, więc Twój problem się nie pojawi var/log/exception.log.

Aby zdiagnozować problem:

  1. Otwórz app/code/core/Mage/Customer/controllers/AccountController.phpi przejdź do loginPostActionmetody.
  2. Tymczasowo odkomentuj Mage::logException($e);połączenie i zapisz zmianę
  3. Spróbuj zalogować się ponownie z poziomu interfejsu, aby wywołać ten sam wyjątek.
  4. Spójrz na ostatnie błędy w dzienniku wyjątków i sprawdź je.
  5. Powtarzaj poprzednie dwa kroki, aż nie zostaną zgłoszone żadne wyjątki.

Nie zapomnij cofnąć zmian w app/code/core/Mage/Customer/controllers/AccountController.php!

Przyczyną mojego problemu było to, że klasa nie ładowała się automatycznie, ponieważ moduł (niepoprawnie) miał <codePool>community</codePool>zamiast tego <codePool>local</codePool>.

Walf
źródło
Wypróbowałem twoje rozwiązanie, ale nie ma wyjątku. Tworzony jest dziennik, chociaż nie mogę się zalogować!
Jon
4

Rozwiązałem problem, dodając poniższy wiersz kodu w trwałym pliku phtml do logowania.

<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
Vinay Sikarwar
źródło
1
Dzięki za rozwiązanie. Zmarnowałem na to prawie pół dnia. I w końcu znalazłem to rozwiązanie.
Gaurav Agrawal
3

ok po półgodzinnych zmaganiach dowiedziałem się dokładnie, w których folderach login.phtml muszę zmienić. Więc idź do

/app/design/frontend/default/template-name/template/persistent/customer/form/

i wklej

<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />

po

<ul class="form-list">

Otóż ​​to.

amyogiji
źródło
3

Jeśli używasz pamięci podręcznej Varnish, może występować inny problem. Cytuję rozwiązanie, które znalazłem gdzie indziej. https://github.com/nexcess/magento-turpentine/issues/169

I proszę bardzo ... Ostatnim razem, gdy przydarzył mi się ten problem z logowaniem, zauważyłem, że „dostałem” dwa różne pliki cookie o tej samej nazwie. „Nakładka”. Wszystkie pola tych plików cookie były identyczne, z wyjątkiem pole „domena”. W pierwszym pliku cookie wartością domeny było „mojadomena.com”, natomiast w drugim „www.mojadomena.com”. Dzieje się tak, gdy użytkownik nie ma już pliku cookie frontonu i wpisuje „mydomain.com” w adresie URL swojej przeglądarki. Powoduje to ustawienie błędnego „frontendowego” pliku cookie i psuje wszystko! Z powrotem na naszym serwerze mamy zasadę, że jeśli użytkownik sieci trafi na „mydomain.com”, aby mu podać „www.mydomain.com”. Oznacza to, że w przeglądarce użytkownika adres URL zmienia się z „mydomain.com” do „www.moja_domena.com”. Nie jestem pewien, czy ma to coś wspólnego z problemem z logowaniem. Po prostu o tym wspominam. Rozwiązanie: Przy konfiguracji magento i terpentynowych opcjach buforowania dostępna jest opcja „Normalizuj hosta”. Musisz ją włączyć. To wszystko! Po tym bez bałaganu nie ma podwójnych plików cookie frontend! Mam nadzieję że to pomoże!

Haim
źródło
2

Przyczyną tego problemu jest to, że niestandardowy formularz logowania nie zawiera żadnego klucza_formularza, a weryfikacja klucza formularza odbywa się w loginPostAction of Magento.

Możesz to naprawić, jak poniżej:

  1. Idź do app / design / frontend / [Your-package] / [Your-theme] /template/customer/form/login.phtml

Odnaleźć:

i wklej to zaraz po powyższym kodzie:

<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
  1. Przejdź do app / design / frontend / Your-package] / [Your-theme] /template/persistent/customer/form/login.phtml i zastosuj te same zmiany.
Jameslj
źródło
1

Powyższe działało dla mnie absolutnie w porządku, ale aktualizowałem z Magento 1.4.1 do 1.9.1, więc ogromny skok. Pliki nie były nigdzie w powyższej lokalizacji, ale znajdowały się w folderze app / design / frontend / BASE.

/ app / design / frontend / BASE / default / template / persistent / customer / form /

Ten folder podstawowy zawiera wiele wspólnych plików od Magento 1.4, więc przeczytałem ... Mam nadzieję, że pozwoli to zaoszczędzić komuś wiele godzin pracy, które zajęło mi ..

Mateusz
źródło
1

Jeśli używasz dowolnego rozszerzenia do logowania społecznościowego, dodaj również klucz formularza do tego pliku login.phtm

Yatin Patel
źródło
1
<input name = "form_key" type = "hidden" value = "<? php echo Mage :: getSingleton ('core / session') -> getFormKey ()?>" />
Yatin Patel
1

Upewnij się, że php-mbstring jest zainstalowany i włączony na twoim serwerze.

Jeśli tak nie jest, logowanie administratora będzie działać, a klient nie.

To sprawdzenie można wykonać, sprawdzając dane wyjściowe phpinfo()lub tymczasowo włączając wyjątek logowania wokół linii 177w:app/code/core/Mage/Customer/controllers/AccountController.php

Należy pamiętać, że operacja może ujawnić hasło klienta w zapisanym śladzie wyjątku.

versedi
źródło
0

Miałem ten sam problem i rozwiązałem go, usuwając wszystkie pliki cookie. Problem wydaje się występować, jeśli masz wiele różnych sklepów Magento i logujesz się do nich w tym samym czasie.

czarny
źródło