Kunden Login funktioniert nicht in 1.9


42

Ich habe gerade eine Neuinstallation von Magento 1.9.0.1 durchgeführt und sehe ein merkwürdiges Verhalten bei der Kundenanmeldung.

In Chrome (Version 36) funktioniert das Anmeldeformular nicht. Ich werde nur zur Anmeldeseite weitergeleitet. Es liegt keine Fehlermeldung vor. Wenn ich jedoch ein neues Inkognito-Fenster öffne, kann ich mich problemlos anmelden. Da ich dachte, dies sei ein Cookie-Problem, löschte ich alle meine Cookies aus dem Browser und versuchte es erneut, und ich erhielt die gleichen Ergebnisse. In beiden Fällen kann ich mich ohne Probleme beim Admin-Panel anmelden.

Ich habe dies auch in Firefox und Safari ausprobiert. Firefox Ich würde sehen, dass das Gleiche passiert (aber nicht konsistent und ich könnte es durch Löschen der Cookies beheben) und ich könnte nicht in Safari replizieren.

Ich hatte noch nie ein Problem mit einer anderen Version von Magento. Gibt es eine grundlegende Änderung in der Art und Weise, wie Magento mit Cookies in Version 1.9 umgeht, und / oder kann ich etwas tun, um dies stabiler zu machen?


Kannst du den Link teilen und Benutzer / Pass testen
MTM

Leider steckt alles hinter dem VPN meiner Arbeit.
Josh Pennington

Installieren Sie Chrome neu und überprüfen Sie es.
Niloct

Gleiche Ergebnisse nach der Neuinstallation.
Josh Pennington

1
Ich hatte einmal ein ähnliches Problem in einer Client-Site, das Problem war, als auf die Site zugegriffen wurde, ohne dass sie wwwbeispielsweise abc.comumgeleitet wurde www.abc.com. In diesem Fall hat der Browser die Cookies für beide festgelegt, und die Anmeldungen haben speziell aufgehört zu funktionieren. Wenn ich jedoch den Cookie manuell lösche, der ohne wwwdie Anmeldungen war, funktioniert er wieder. Können Sie überprüfen, ob dies auch bei Ihnen der Fall ist?
MTM

Antworten:


38

Ich hatte das selbe problem ....

Die Antwort ist, dass Ihr Thema keine Variable namens liefert form_key.

Genau wie oben muss ich hinzufügen:

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

Du fügst es gleich danach hinzu <ul class="form-list">

zu jeder meiner login.phtmlDateien für das Thema.

Möglicherweise haben Sie auch Probleme mit der Aktualisierung der Anzahl der Warenkorbelemente

Hier ist die Bedeutung von form_keys:

Seit jeher enthielt das Backend von Magento einen Formularschlüssel, der vor XSS-Angriffen geschützt war [1]. Mit Magento 1.8 wurde der Formularschlüssel aus dem gleichen Grund in das Frontend eingegeben: Zum Schutz vor dem Absenden von Formularen von einer anderen Website mithilfe Ihres Browsers. Ein böswilliger Angreifer kann Ihrem Einkaufswagen Inhalte hinzufügen, während Sie sich in einem anderen Browser-Tab befinden, oder sogar eine Bestellung für Sie abschließen. Dies hängt von vorhersehbaren URLs ab, da die Site keinen Zugriff auf den tatsächlichen HTML-Inhalt auf der Browser-Registerkarte hat, auf der Ihre Magento-Bestellung wartet. Alles, was an den Magento Store gesendet wird, sendet jedoch Ihre Cookies und verwendet somit Ihre Sitzung.

Durch Hinzufügen eines eindeutigen Schlüssels zu jedem Formular oder zu jedem Link, der eine Aktion auf dem Server generiert, ist der URL- oder Formularinhalt nicht mehr vorhersehbar. Der Formularschlüssel wird in den Sitzungsdaten gespeichert und bei der Übermittlung an den Server überprüft. Wenn sie nicht übereinstimmen, erhalten Sie einen Formularschlüsselfehler und die Aktion ist nicht abgeschlossen.


3
Fügen Sie die obige versteckte Eingabe "form_key" zum Formular hinzu: app / design / frontend / base / default / template / persistent / checkout / onepage / login.phtml
Flipmedia

5
Ein viel besserer Codeausschnitt wäre <?php echo $this->getBlockHtml('formkey'); ?>eher als die große Eingabe.
Navarr

Fügen Sie dies vor dem Schließen des Formulars ein. Tag <? Php echo $ this-> getBlockHtml ('formkey'); ?>
Tahir Yasin

schön, das hat bei mir funktioniert. Vielen Dank, ich habe abgestimmt!
CodingMageSheen

Waow, ich habe so lange danach gesucht>. <! Danke vielmals!
Keenora Fluffball

8

Es kann sein:

cookie setting issue in Chrome browser

ODER

Magento 1.9 verwendet form key validation at customer loggin and registerSeite.

Auf Post actionsie überprüfen Sie die Form Taste using function _validateFormKey()am Regler

form key issue: form key missing Fügen Sie diesen Code in Ihr Formular ein

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

ODER

Cookie domain setting issue Gehe zu Check Einstellung ist richtig oder nicht

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


1
Das Anmeldeformular enthält bereits das Feld form_key, und ich habe die Cookie-Domäne festgelegt, die ebenfalls nicht behoben wurde.
Josh Pennington

bitte lösche cookie aus dem browser oder gehe zu accountcontroller.php überprüfe ob (! $ this -> _ validateFormKey ()) {funktioniert oder nicht
Amit Bera

Der Formularschlüssel wird ordnungsgemäß überprüft. Tatsächlich sieht es so aus, als ob loginPostAction einwandfrei läuft.
Josh Pennington

1
@AmitBera Soll ich dich treffen Magento Chat? Ich habe ein verwandtes Problem mit dem Wunschliste-Modul?
Schmetterling

@AmitBera Ich habe den Schlüssel gesetzt, aber es funktioniert immer noch nicht. Auch in accountcontroller.php wird if (!$this->_validateFormKey()) {false zurückgegeben, was bedeutet, dass Magento den angegebenen Schlüssel nicht validieren kann. Irgendeine Idee, warum es passiert?
Arvind07

6

Versuchen Sie, die Lebensdauer der Cookies auf unter 86400 zu erhöhen, da das Problem mit Cookies in Zusammenhang zu stehen scheint

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


Der Grund kann sein, dass die Cookie-Lebensdauer standardmäßig auf 3600 (1 Stunde) festgelegt ist. Wenn die Computerzeit des Endbenutzers jedoch vor der Serverzeit abläuft, werden Cookies nicht sowohl für das Magento-Frontend als auch für das Backend gesetzt. Beispielsweise ist die Computerzeit des Endbenutzers eine Stunde vor der Zeit des Servers. Dies bedeutet, dass das Cookie (das die Sitzungs-ID des Benutzers enthält) verfällt, sobald sich der Benutzer anmeldet oder versucht, ein Element hinzuzufügen.


4

Für zukünftige Leser: Es gibt viele mögliche Ursachen für dieses Problem. Während der Anmeldung wird aus Sicherheitsgründen eine Ausnahmeprotokollierung unterdrückt, sodass Ihr Problem nicht angezeigt wird var/log/exception.log.

So diagnostizieren Sie Ihr Problem:

  1. Öffne app/code/core/Mage/Customer/controllers/AccountController.phpund gehe zur loginPostActionMethode.
  2. Kommentieren Sie den Mage::logException($e);Anruf vorübergehend aus und speichern Sie die Änderung
  3. Versuchen Sie erneut, sich über das Front-End anzumelden, um dieselbe Ausnahme auszulösen.
  4. Sehen Sie sich die letzten Fehler im Ausnahmeprotokoll an und untersuchen Sie sie.
  5. Wiederholen Sie die beiden vorherigen Schritte, bis keine Ausnahmen mehr ausgelöst werden.

Vergessen Sie nicht, die Änderungen an rückgängig zu machen app/code/core/Mage/Customer/controllers/AccountController.php!

Die Ursache für mein Problem war, dass eine Klasse nicht automatisch geladen werden konnte, weil das Modul (falsch) <codePool>community</codePool>statt hatte <codePool>local</codePool>.


Ich habe Ihre Lösung ausprobiert, aber es wird keine Ausnahmebedingung erstellt, obwohl ich mich nicht anmelden kann!
Jon

4

Ich habe das Problem behoben, indem ich einfach die folgende Codezeile in die dauerhafte Login-Phtml-Datei eingefügt habe.

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

1
Danke für die Lösung. Ich habe fast einen halben Tag damit verbracht. Und endlich diese Lösung gefunden.
Gaurav Agrawal

3

ok nach einer halben stunde fand ich genau heraus, in welchen ordnern login.phtml ich wechseln muss. Also geh zu

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

und einfügen

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

nach

<ul class="form-list">

das ist es.


3

Wenn Sie den Lack-Cache verwenden, liegt möglicherweise ein anderes Problem vor. Ich zitiere eine Lösung, die ich woanders gefunden habe. https://github.com/nexcess/magento-turpentine/issues/169

Und los geht's ... Als mir das letzte Mal dieses Problem mit dem Login passiert ist, ist mir aufgefallen, dass ich zwei verschiedene Cookies mit demselben Namen "bekommen" habe. "Frontend". Alle Dateien dieser Cookies waren identisch, mit Ausnahme der Feld "domain". Im ersten Cookie lautete der Domain-Wert "mydomain.com", im zweiten "www.mydomain.com". Dies geschieht, wenn ein Benutzer noch kein Frontend-Cookie hat und "mydomain.com" in die URL seines Browsers eingibt. Dies löst das Setzen des fehlerhaften "Frontend" -Cookies aus und bringt die Dinge durcheinander! Zurück auf unserem Server haben wir die Regel, dass, wenn ein Webbenutzer "mydomain.com" drückt, um ihm die "www.mydomain.com" zu liefern. Dies bedeutet, dass im Browser des Benutzers in der Adressleiste die URL von "mydomain.com" gedreht wird. zu "www.mydomain.com". Ich bin mir nicht sicher, ob dies mit Anmeldeproblemen zu tun hat. Ich erwähne es nur. Lösung: Bei der Magento-Konfiguration für Terpentin-Caching-Optionen gibt es die Option "Host normalisieren". Sie müssen diese Option aktivieren. Das war's! Danach keine schmutzige Sache keine doppelten Frontend-Cookies! Hoffe das hilft!


2

Der Grund für dieses Problem ist, dass das benutzerdefinierte Anmeldeformular keinen form_key enthält und eine Überprüfung des Formularschlüssels in loginPostAction von Magento stattfindet.

Sie können es wie folgt beheben:

  1. Gehen Sie zu app / design / frontend / [Ihr-Paket] / [Ihr-Thema] /template/customer/form/login.phtml

Finden:

und füge dies direkt nach dem obigen Code ein:

<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
  1. Gehen Sie zu app / design / frontend / Your-package] / [Your-theme] /template/persistent/customer/form/login.phtml und übernehmen Sie die gleichen Änderungen.

1

Das Obige hat für mich absolut gut funktioniert, aber ich habe ein Upgrade von Magento 1.4.1 auf 1.9.1 durchgeführt, was einen enormen Sprung bedeutet. Die Dateien waren nirgends oben zu finden, befanden sich jedoch im Ordner app / design / frontend / BASE.

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

Dieser Basisordner enthält eine Menge gängiger Dateien seit Magento 1.4, also habe ich gelesen ... Hoffentlich spart dies jemandem die vielen Stunden Arbeit, die ich dafür benötigt habe.


1

Wenn Sie eine Social Login-Erweiterung verwenden, fügen Sie auch den Formularschlüssel in die Datei login.phtm ein


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

1

Stellen Sie sicher, dass php-mbstring auf Ihrem Server installiert und aktiviert ist.

Ist dies nicht der Fall, funktioniert der Administrator-Login, der Kunde nicht.

Diese Prüfung kann durchgeführt werden, indem die Ausgabe von überprüft wird phpinfo()oder indem vorübergehend die Anmeldungsausnahme um die Zeile 177in aktiviert wird :app/code/core/Mage/Customer/controllers/AccountController.php

Beachten Sie, dass der Vorgang das Kundenkennwort in der protokollierten Ausnahmeverfolgung offenlegen kann.


0

Ich hatte das gleiche Problem und löste es, indem ich alle Cookies löschte. Das Problem scheint aufzutreten, wenn Sie mehrere verschiedene Magento-Shops haben und sich gleichzeitig anmelden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.