La connexion client ne fonctionne pas dans la version 1.9


42

Je viens de faire une nouvelle installation de Magento 1.9.0.1 et je constate un comportement très étrange avec le formulaire de connexion client.

Dans Chrome (version 36), le formulaire de connexion ne fonctionne pas. Je suis simplement redirigé vers la page de connexion. Il n'y a pas de message d'erreur. Cependant, lorsque j'ouvre une nouvelle fenêtre Incognito, je peux me connecter très bien. Pensant qu'il s'agissait d'un problème de cookie, j'ai effacé tous mes cookies du navigateur et essayé à nouveau et j'ai obtenu les mêmes résultats. Dans les deux cas, je peux me connecter au panneau d'administration sans aucun problème.

J'ai également essayé ceci dans Firefox et Safari. Firefox je verrais la même chose se produire (mais pas systématiquement et je pourrais le réparer en effaçant les cookies) et je ne pouvais pas répliquer dans Safari.

Je n'ai jamais eu de problème avec cela dans aucune autre version de Magento. Existe-t-il un changement fondamental dans la manière dont Magento traite les cookies dans la version 1.9 et / ou est-ce que je peux faire quelque chose pour rendre cela plus stable?


pouvez-vous partager le lien et tester utilisateur / passer
MTM

Malheureusement, tout cela est lié au VPN de mon travail.
Josh Pennington

Réinstallez Chrome et vérifiez.
Niloct

Mêmes résultats après la réinstallation.
Josh Pennington

1
J'avais une fois eu un problème similaire dans un site client, le problème était, lorsque le site a été accédé sans, wwwpar exemple, abc.comil a ensuite été redirigé vers www.abc.com. Dans ce cas, le navigateur configurait les cookies pour les deux et les connexions ont spécialement arrêté de fonctionner, mais si je supprime manuellement le cookie qui était sans wwwles connexions, il recommence à fonctionner.Pouvez-vous vérifier si c'est également le cas avec vous?
MTM

Réponses:


38

J'ai eu le même problème....

La réponse est que votre thème ne fournit pas une variable appelée form_key.

Comme indiqué ci-dessus, je dois ajouter:

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

vous l'ajoutez juste après <ul class="form-list">

à chacun de mes login.phtmlfichiers pour le thème.

Vous pouvez également avoir des problèmes avec la quantité mise à jour des éléments du panier

Voici l'importance de form_keys:

Depuis le début des temps, le backend de Magento contenait une clé de formulaire qui protégeait contre les attaques XSS [1]. Avec Magento 1.8, la clé de formulaire est entrée dans l’interface pour la même raison: pour vous protéger contre la soumission de formulaires à partir d’un autre site Web, à l’aide de votre navigateur. un attaquant malveillant peut ajouter des éléments à votre panier lorsque vous vous trouvez dans un autre onglet du navigateur, voire que vous complétez une commande pour vous. Cela dépend d'URL prévisibles, car le site n'aura pas accès au contenu HTML réel dans l'onglet du navigateur où votre commande Magento est en attente. Tous les messages envoyés à la boutique Magento soumettront cependant vos cookies et utiliseront ainsi votre session.

En ajoutant une clé unique à chaque formulaire ou à chaque lien générant une action sur le serveur, l'URL ou le contenu du formulaire ne sont plus prévisibles. La clé de formulaire est stockée dans les données de session et validée lors de sa soumission au serveur. S'ils ne correspondent pas, vous obtenez une erreur de clé de formulaire et l'action n'est pas terminée.


3
Ajoutez l'entrée "cachée_formulaire" ci-dessus au formulaire situé: app / design / frontend / base / default / template / persistant / checkout / onepage /
login.phtml

5
Un fragment de code bien meilleur à utiliser serait <?php echo $this->getBlockHtml('formkey'); ?>plutôt qu'une entrée volumineuse.
Navarr

Collez ceci avant la balise de fermeture du formulaire <? Php echo $ this-> getBlockHtml ('formkey'); ?>
Tahir Yasin

magnifique, cela a fonctionné pour moi. Merci beaucoup, j'ai voté favorablement!
CodingMageSheen

Waow, j'ai cherché si longtemps pour cela>. <! Merci beaucoup!
Keenora Fluffball

8

C'est possible:

cookie setting issue in Chrome browser

OU

Magento 1.9 utilise la form key validation at customer loggin and registerpage.

Sur Post actionce vérifier la forme clé using function _validateFormKey()au contrôleur

form key issue: form key missing alors ajoutez ce code dans votre formulaire

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

OU

Cookie domain setting issue Aller à vérifier le réglage est correct ou non

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


1
Le formulaire de connexion a déjà le champ form_key et j'ai défini le domaine de cookie et cela ne l'a pas corrigé.
Josh Pennington

veuillez supprimer le cookie du navigateur ou aller sur accountcontroller.php pour vérifier si (! $ this -> _ validateFormKey ()) {fonctionne ou non
Amit Bera

La clé de formulaire est correctement validée. En fait, il semble que loginPostAction fonctionne parfaitement.
Josh Pennington

1
@AmitBera Dois-je vous rencontrer magento chat? J'ai un problème lié au module de liste de souhaits?
Papillon

@AmitBera J'ai mis la clé, mais ça ne fonctionne toujours pas. Aussi dans accountcontroller.php if (!$this->_validateFormKey()) {renvoie false, ce qui signifie que Magento ne peut pas valider la clé fournie. Toute idée pourquoi cela se produit-il?
Arvind07

6

Comme la question semble être lié cookies, essayez d' augmenter la durée de vie des cookies à 86400 sous

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


La raison peut être, par défaut, la durée de vie du cookie est définie sur 3600 (1 heure). Mais si le temps de l'ordinateur des utilisateurs finaux est supérieur à celui du serveur, les cookies ne seront pas configurés pour le front-end Magento aussi bien que pour le backend. Par exemple, l'heure de l'utilisateur final sur l'ordinateur est d'une heure inférieure à celle du serveur, ce qui signifie que le cookie (identifiant de session de l'utilisateur titulaire) expirera dès que l'utilisateur se connectera ou tentera d'ajouter un élément.


4

Pour les futurs lecteurs: Il existe de nombreuses causes possibles à ce problème. Lors de la connexion, certains enregistrements d’exceptions sont supprimés pour des raisons de sécurité. Votre problème n’apparaîtra donc pas.var/log/exception.log .

Pour diagnostiquer votre problème:

  1. Ouvrez app/code/core/Mage/Customer/controllers/AccountController.phpet allez à la loginPostActionméthode.
  2. Décommentez temporairement l' Mage::logException($e);appel et sauvegardez la modification
  3. Essayez de vous reconnecter depuis le début pour déclencher la même exception.
  4. Examinez les dernières erreurs du journal des exceptions et étudiez-les.
  5. Répétez les deux étapes précédentes jusqu'à ce qu'il n'y ait plus d'exceptions.

N'oubliez pas d'annuler les modifications apportées app/code/core/Mage/Customer/controllers/AccountController.php!

La cause de mon problème était qu'une classe échouait à l'autoload car le module (incorrectement) en avait à la <codePool>community</codePool>place <codePool>local</codePool>.


J'ai essayé votre solution mais il n'y a pas d'exception.log en cours de création bien que je ne puisse pas me connecter!
Jon

4

J'ai résolu le problème en ajoutant simplement la ligne de code ci-dessous dans le fichier phtml de connexion persistante.

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

1
Merci pour la solution. J'ai perdu presque une demi-journée à ce sujet. Et enfin trouvé cette solution.
Gaurav Agrawal

3

ok, après une demi-heure de travail, j'ai découvert exactement dans quels dossiers login.phtml je devais changer. Alors allez à

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

et coller

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

après

<ul class="form-list">

c'est ça.


3

Si vous utilisez le cache Varnish, le problème peut être différent. Je cite une solution que j'ai trouvée ailleurs. https://github.com/nexcess/magento-turpentine/issues/169

Et nous y voilà ... La dernière fois que ce problème de connexion a eu lieu, j’ai remarqué que j’avais "reçu" deux cookies différents portant le même nom. "Frontend" .Tous les champs de ces cookies sont identiques, à l’exception du champ "domaine". Dans le premier cookie, la valeur du domaine était "mydomain.com", alors que dans le second "www.mydomain.com". Cela se produit lorsqu'un utilisateur n'a pas déjà de cookie frontal et tape "mydomain.com" dans l'URL de son navigateur. Cela déclenche la configuration du cookie "frontal" défectueux et gâche le problème! De retour sur notre serveur, nous avons une règle qui veut que si un internaute clique sur "mydomain.com" pour lui servir le "www.mondomaine.com". Cela signifie que dans le navigateur de l'utilisateur, dans la barre d'adresse, l'URL est tournée de "mydomain.com". sur "www.mondomaine.com". Je ne suis pas sûr que cela a quelque chose à voir avec le problème de connexion. Je viens de le mentionner. Solution: Dans la configuration de magento pour les options de mise en cache de la térébenthine, il existe une option "Normaliser l'hôte". Vous devez l'activer. Ça y est! Après cette affaire pas compliquée, pas de double cookies frontaux! J'espère que cela t'aides!


2

La raison de ce problème est que le formulaire de connexion personnalisé ne contient aucune clé form_key et qu'une validation de clé de formulaire est en cours dans loginPostAction de Magento.

Vous pouvez le réparer comme ci-dessous:

  1. Allez sur app / design / frontend / [Votre paquet] / [Votre thème] /template/customer/form/login.phtml

Trouver:

et collez-le juste après le code ci-dessus:

<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
  1. Accédez à app / design / frontend / Votre package] / [Votre-thème] /template/persistent/customer/form/login.phtml et appliquez les mêmes modifications.

1

Ce qui précède a parfaitement fonctionné pour moi, mais je passais de Magento 1.4.1 à 1.9.1, ce qui représentait un énorme progrès. Les fichiers ne se trouvaient nulle part à l'emplacement ci-dessus, mais dans le dossier app / design / frontend / BASE.

/ app / design / frontend / BASE / default / template / persistent / client / formulaire /

Ce dossier de base contient beaucoup de fichiers communs depuis Magento 1.4, alors j'ai lu ... Espérons que cela sauvera les nombreuses heures de travail qu'il m'a fallu ..


1

Si vous utilisez une extension de connexion sociale, ajoutez également une clé de formulaire dans le fichier login.phtm.


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

1

Assurez-vous que php-mbstring est installé et activé sur votre serveur.

Si ce n'est pas le cas, la connexion administrateur fonctionnera alors que le client ne le fera pas.

Cette vérification peut être effectuée en examinant la sortie de phpinfo()ou en activant temporairement une exception de connexion autour d'une ligne 177dans:app/code/core/Mage/Customer/controllers/AccountController.php

Sachez que cette opération peut révéler le mot de passe du client dans la trace des exceptions consignées.


0

J'ai eu le même problème et je l'ai résolu en supprimant tous les cookies. Le problème semble se produire si vous avez plusieurs magasins magento différents et que vous vous connectez à eux en même temps.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.