El inicio de sesión del cliente no funciona en 1.9

42

Acabo de hacer una instalación nueva de Magento 1.9.0.1 y veo un comportamiento muy extraño con el formulario de inicio de sesión del cliente.

En Chrome (versión 36) el formulario de inicio de sesión no funciona. Acabo de ser redirigido a la página de inicio de sesión. No hay ningún mensaje de error. Sin embargo, cuando abro una nueva ventana de incógnito, puedo iniciar sesión bien. Pensando que esto era un problema de cookies, borré todas mis cookies del navegador e intenté nuevamente y obtuve los mismos resultados. En ambos casos, puedo iniciar sesión en el panel de administración sin ningún problema.

También he intentado esto en Firefox y Safari. Firefox vería que sucediera lo mismo (pero no de manera consistente y podría solucionarlo borrando las cookies) y no podría replicar en Safari.

Nunca he tenido un problema con esto en ninguna otra versión de Magento. ¿Hay algún tipo de cambio fundamental en la forma en que Magento maneja las cookies en la versión 1.9 y / o hay algo que pueda hacer para que esto sea más estable?

Josh Pennington
fuente
¿Puedes compartir el enlace y probar usuario / pase?
MTM
Desafortunadamente, todo está atado detrás de la VPN de mi trabajo.
Josh Pennington
Vuelva a instalar Chrome y verifique.
Niloct
Los mismos resultados después de la reinstalación.
Josh Pennington
1
Una vez tuve un problema similar en el sitio de un cliente, el problema fue cuando se accedió al sitio sin, wwwpor ejemplo, abc.comse lo redirigió www.abc.com. En este caso, el navegador estaba configurando las cookies para ambos y los inicios de sesión dejaron de funcionar especialmente, pero si wwwelimino manualmente la cookie que estaba sin los inicios de sesión, comenzaría a funcionar nuevamente.
MTM

Respuestas:

38

Yo tuve el mismo problema....

La respuesta es que su tema no proporciona una variable llamada form_key.

Tal como se indicó anteriormente, tengo que agregar:

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

lo agregas justo después <ul class="form-list">

a cada uno de mis login.phtmlarchivos para el tema.

También puede tener problemas con la cantidad de actualización de los artículos del carrito

Aquí está la importancia de form_keys:

Desde el principio de los tiempos, el backend de Magento contenía una clave de formulario que protegía contra los ataques XSS [1]. Con Magento 1.8, la clave de formulario ha entrado en la interfaz por la misma razón: para protegerse contra el envío de formularios desde otro sitio web, utilizando su navegador. un atacante malintencionado puede agregar cosas a su carrito mientras está en una pestaña diferente del navegador o incluso completar un pedido por usted. Esto se basa en URL predecibles, porque el sitio no tendrá acceso al contenido HTML real en la pestaña del navegador donde tiene su pedido de Magento esperando. Sin embargo, todo lo que se envíe a la tienda Magento enviará sus cookies y, por lo tanto, utilizará su sesión.

Al agregar una clave única a cada formulario o a cada enlace que genera una acción en el servidor, la URL o el contenido del formulario ya no son predecibles. La clave del formulario se almacena en los datos de la sesión y se valida al enviarla al servidor. Si no coinciden, aparece un error de clave de formulario y la acción no se completa.

BWalt
fuente
3
Agregue la entrada oculta "form_key" anterior al formulario ubicado: app / design / frontend / base / default / template / persistent / checkout / onepage / login.phtml
Flipmedia
55
Un fragmento de código mucho mejor para usar sería <?php echo $this->getBlockHtml('formkey'); ?>más que la entrada grande.
Navarr
Pegue esto antes de la etiqueta de cierre del formulario <? Php echo $ this-> getBlockHtml ('formkey'); ?>
Tahir Yasin
hermoso, esto funcionó para mí. Muchas gracias, ¡he votado!
CodingMageSheen
Waow, he buscado tanto tiempo por esto>. <! ¡Muchas gracias!
Keenora Fluffball
8

Puede ser:

cookie setting issue in Chrome browser

O

Magento 1.9 está usando la form key validation at customer loggin and registerpágina.

En Post actionél, verifique la tecla de formulario using function _validateFormKey()en el controlador

form key issue: form key missing entonces agregue este código en su formulario

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

O

Cookie domain setting issue Verifique que la configuración sea correcta o no

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

Amit Bera
fuente
1
El formulario de inicio de sesión ya tiene el campo form_key y configuré el dominio de cookies y eso tampoco lo solucionó.
Josh Pennington
elimine la cookie del navegador o vaya a accountcontroller.php, compruebe si (! $ this -> _ validateFormKey ()) {funciona o no
Amit Bera
La clave de formulario se está validando correctamente. De hecho, parece que loginPostAction está funcionando perfectamente bien.
Josh Pennington
1
@AmitBera ¿Te veo en el chat de magento? Tengo un problema relacionado con el módulo de la lista de deseos?
Mariposa
@AmitBera He configurado la clave, pero aún no funciona. También en accountcontroller.php if (!$this->_validateFormKey()) {devuelve false, lo que significa que Magento no puede validar la clave suministrada. ¿Alguna idea de por qué sucede?
Arvind07
6

Como el problema parece estar relacionado con las cookies, intente aumentar el tiempo de vida de las cookies a 86400 en

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


El motivo puede ser que, de forma predeterminada, la duración de la cookie se establece en 3600 (1 hora). Pero si el tiempo de la computadora de los usuarios finales se adelanta al tiempo del servidor, las cookies no se establecerán para la interfaz de Magento ni para el servidor. Por ejemplo, el tiempo de la computadora del usuario final es de 1 hora hacia adelante que el tiempo del servidor, lo que significa que la cookie (que contiene el ID de sesión del usuario) caducará tan pronto como el usuario inicie sesión o intente agregar un elemento.

Anshu Mishra
fuente
4

Para futuros lectores: hay muchas causas posibles para este problema. Durante el inicio de sesión, algunos registros de excepción se suprimen por razones de seguridad, por lo que su problema no se mostrará var/log/exception.log.

Para diagnosticar su problema:

  1. Abre app/code/core/Mage/Customer/controllers/AccountController.phpy ve al loginPostActionmétodo.
  2. Descomenta temporalmente la Mage::logException($e);llamada y guarda el cambio
  3. Intente iniciar sesión desde el front end nuevamente para activar la misma excepción.
  4. Mire los últimos errores en el registro de excepciones e investíquelos.
  5. Repita los dos pasos anteriores hasta que no se produzcan más excepciones.

¡No olvides deshacer los cambios a app/code/core/Mage/Customer/controllers/AccountController.php!

La causa de mi problema fue que una clase no podía cargarse automáticamente porque el módulo (incorrectamente) tenía en <codePool>community</codePool>lugar de <codePool>local</codePool>.

Walf
fuente
Probé su solución, pero no se está creando una excepción. ¡Aunque no puedo iniciar sesión!
Jon
4

Solucioné el problema simplemente agregando la siguiente línea de código en el archivo phtml de inicio de sesión persistente.

<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
Vinay Sikarwar
fuente
1
Gracias por la solucion. He perdido casi medio día en eso. Y finalmente encontré esta solución.
Gaurav Agrawal
3

Ok, después de luchar durante media hora, descubrí exactamente en qué carpetas login.phtml tengo que cambiar. Así que ve a

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

y pegar

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

después

<ul class="form-list">

Eso es.

amyogiji
fuente
3

Si está utilizando Varnish cache, puede haber un problema diferente. Estoy citando una solución que encontré en otro lugar. https://github.com/nexcess/magento-turpentine/issues/169

Y aquí vamos ... La última vez que me ocurrió este problema con el inicio de sesión, noté que había "recibido" dos cookies diferentes con el mismo nombre "frontend". Todos los archivos de estas cookies eran idénticos, excepto el campo "dominio". En la primera cookie, el valor del dominio era "midominio.com", mientras que en la segunda era "www.midominio.com". Esto sucede cuando un usuario ya no tiene una cookie de interfaz y escribe "mydomain.com" en la URL de su navegador. ¡Esto activa la cookie defectuosa "frontend" que se configura y arruina las cosas! De vuelta en nuestro servidor, tenemos la regla de que si un usuario de la web pulsa "mydomain.com" para servirle el "www.mydomain.com". Esto significa que en el navegador del usuario, en la barra de direcciones, la URL se cambia de "mydomain.com" a "www.midominio.com". No estoy seguro de que esto tenga algo que ver con el problema de inicio de sesión. Solo lo menciono. Solución: en la configuración de magento en las opciones de almacenamiento en caché de trementina hay una opción "Normalizar host". Debe habilitarla. ¡Eso es! ¡Después de esto no hay nada desordenado ni cookies de doble interfaz! ¡Espero que esto ayude!

Haim
fuente
2

El motivo de este problema es que el formulario de inicio de sesión personalizado no contiene ninguna clave_formulario y hay una validación de clave de formulario en loginPostAction of Magento.

Puedes arreglarlo de la siguiente manera:

  1. Vaya a app / design / frontend / [Your-package] / [Your-theme] /template/customer/form/login.phtml

Encontrar:

y pegue esto justo después del código anterior:

<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
  1. Vaya a app / design / frontend / Your-package] / [Your-theme] /template/persistent/customer/form/login.phtml y aplique los mismos cambios.
Jameslj
fuente
1

Lo anterior funcionó para mí absolutamente bien, pero estaba actualizando de Magento 1.4.1 a 1.9.1, así que fue un gran salto. Los archivos no se encontraban en ninguna parte en la ubicación anterior, pero se encontraban en la carpeta app / design / frontend / BASE.

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

Esta carpeta base contiene muchos archivos comunes desde Magento 1.4, así que leí ... Espero que esto le ahorre a alguien las muchas horas de trabajo que me llevó ...

Mateo
fuente
1

Si está utilizando cualquier extensión de inicio de sesión social, también agregue la clave de formulario en ese archivo login.phtm

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

Asegúrese de que php-mbstring esté instalado y habilitado en su servidor.

Si no es así, el inicio de sesión de administrador funcionará mientras que el cliente no.

Esta comprobación se puede realizar buscando en la salida phpinfo()o habilitando temporalmente la excepción de inicio de sesión alrededor de la línea 177en:app/code/core/Mage/Customer/controllers/AccountController.php

Tenga en cuenta que la operación puede revelar la contraseña del cliente en el seguimiento de excepción registrado.

versedi
fuente
0

Tuve el mismo problema y lo resolví eliminando todas las cookies. El problema parece suceder si tiene varias tiendas de magento diferentes e inicia sesión en ellas al mismo tiempo.

Negro
fuente