L'accesso del cliente non funziona in 1.9


42

Ho appena fatto una nuova installazione di Magento 1.9.0.1 e vedo un comportamento molto strano con il modulo di accesso del cliente.

In Chrome (versione 36) il modulo di accesso non funziona. Sono appena reindirizzato alla pagina di accesso. Non c'è nessun messaggio di errore. Tuttavia, quando apro una nuova finestra di navigazione in incognito, riesco ad accedere correttamente. Pensando che si trattasse di un problema con i cookie, ho cancellato tutti i miei cookie dal browser e riprovato e ho ottenuto gli stessi risultati. In entrambi i casi, sono in grado di accedere al pannello di amministrazione senza problemi.

Ho anche provato questo in Firefox e Safari. Firefox Vedrei accadere la stessa cosa (ma non in modo coerente e potrei risolverlo cancellando i cookie) e non potrei replicare in Safari.

Non ho mai avuto problemi con questo in nessun'altra versione di Magento. C'è qualche tipo di cambiamento fondamentale nel modo in cui Magento gestisce i cookie nella versione 1.9 e / o c'è qualcosa che posso fare per renderlo più stabile?


puoi condividere il link e testare utente / pass
MTM

Purtroppo è tutto legato dietro la VPN del mio lavoro.
Josh Pennington,

Reinstalla Chrome e verifica.
Niloct,

Stessi risultati dopo la reinstallazione.
Josh Pennington

1
una volta stavo avendo un problema simile in un sito di clienti, il problema era che quando si accedeva al sito senza, wwwad esempio abc.com, veniva reindirizzato www.abc.com. In questo caso, il browser stava impostando i cookie per entrambi e gli accessi hanno smesso di funzionare appositamente, ma se elimino manualmente il cookie che era senza wwwgli accessi ricomincio a funzionare. Puoi verificare se lo stesso vale anche per te?
MTM,

Risposte:


38

Ho avuto lo stesso problema....

La risposta è che il tuo tema non fornisce una variabile chiamata form_key.

Proprio come indicato sopra devo aggiungere:

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

lo aggiungi subito dopo <ul class="form-list">

a ciascuno dei miei login.phtmlfile per il tema.

Potresti anche avere problemi con la quantità di aggiornamento degli articoli del carrello

Ecco l'importanza di form_keys:

Dall'inizio dei tempi, il backend di Magento conteneva una chiave del modulo che proteggeva dagli attacchi XSS [1]. Con Magento 1.8 la chiave del modulo è entrata nel frontend per lo stesso motivo: per proteggere dall'invio del modulo da un altro sito Web, usando il tuo browser. un utente malintenzionato può aggiungere elementi al carrello mentre ci si trova in una diversa scheda del browser o addirittura completare un ordine per te. Questo si basa su URL prevedibili, perché il sito non avrà accesso al contenuto HTML effettivo nella scheda del browser in cui il tuo ordine Magento è in attesa. Tutto ciò che viene inviato al negozio Magento invierà comunque i tuoi cookie e quindi utilizzerà la tua sessione.

Aggiungendo una chiave univoca a ciascun modulo o a ciascun collegamento che genera un'azione sul server, l'URL o il contenuto del modulo non sono più prevedibili. La chiave del modulo viene archiviata nei dati della sessione e convalidata al momento dell'invio al server. Se non corrispondono, viene visualizzato un errore chiave del modulo e l'azione non viene completata.


3
Aggiungi l'input nascosto "form_key" sopra al modulo che si trova: app / design / frontend / base / default / template / persistente / checkout / onepage / login.phtml
Flipmedia,

5
Uno snippet di codice molto migliore da utilizzare sarebbe <?php echo $this->getBlockHtml('formkey'); ?>invece l'input di grandi dimensioni.
Navarr,

Incollalo prima del tag di chiusura del modulo <? Php echo $ this-> getBlockHtml ('formkey'); ?>
Tahir Yasin il

bellissimo, questo ha funzionato per me. Grazie mille ho votato!
CodingMageSheen

Waow, ho cercato così a lungo per questo>. <! Molte grazie!
Keenora Fluffball

8

Può essere:

cookie setting issue in Chrome browser

O

Magento 1.9 è utilizzare form key validation at customer loggin and registerpagina.

Su di Post actionesso controlla la chiave del modulo using function _validateFormKey()sul controller

form key issue: form key missing quindi aggiungi questo codice nel tuo modulo

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

O

Cookie domain setting issue vai a controllare l'impostazione è corretta o no

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


1
Il modulo di accesso ha già il campo form_key e ho impostato il dominio dei cookie e anche questo non lo ha risolto.
Josh Pennington,

per favore cancella i cookie dal browser o vai su accountcontroller.php controlla se (! $ this -> _ validateFormKey ()) {funziona o no
Amit Bera

La chiave del modulo sta convalidando correttamente. In effetti, sembra che loginPostAction funzioni perfettamente.
Josh Pennington,

1
@AmitBera Devo incontrarti con la chat di Magento? Ho un problema correlato sul modulo lista desideri?
Butterfly,

@AmitBera Ho impostato la chiave, ma continua a non funzionare. Anche in accountcontroller.php if (!$this->_validateFormKey()) {restituisce false, il che significa che Magento non è in grado di convalidare la chiave fornita. Qualche idea sul perché accada?
Arvind07

6

Poiché il problema sembra essere correlato ai cookie, prova ad aumentare la durata dei cookie a 86400 sotto

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


Il motivo potrebbe essere, per impostazione predefinita, la durata del cookie è impostata su 3600 (1 ora). Ma se il tempo del computer degli utenti finali è superiore a quello del server, i cookie non verranno impostati per il frontend Magento e il backend. Ad esempio, l'ora del computer dell'utente finale è di 1 ora in avanti rispetto all'ora del server, ciò significa che il cookie (che contiene l'ID di sessione dell'utente) scadrà non appena l'utente accede o tenta di aggiungere un elemento.


4

Per i futuri lettori: ci sono molte possibili cause per questo problema. Durante l'accesso, alcune registrazioni delle eccezioni vengono eliminate per motivi di sicurezza, quindi il problema non verrà visualizzato var/log/exception.log.

Per diagnosticare il problema:

  1. Apri app/code/core/Mage/Customer/controllers/AccountController.phpe vai al loginPostActionmetodo.
  2. Rimuovi temporaneamente il commento dalla Mage::logException($e);chiamata e salva la modifica
  3. Prova ad accedere nuovamente dal front-end per attivare la stessa eccezione.
  4. Guarda gli ultimi errori nel registro delle eccezioni e analizzali.
  5. Ripeti i due passaggi precedenti fino a quando non vengono generate più eccezioni.

Non dimenticare di annullare le modifiche a app/code/core/Mage/Customer/controllers/AccountController.php!

La causa del mio problema era che una classe non riusciva a caricarsi automaticamente perché il modulo (erroneamente) aveva <codePool>community</codePool>invece di <codePool>local</codePool>.


Ho provato la tua soluzione ma non c'è alcuna eccezione.log in fase di creazione anche se non riesco ad accedere!
Jon

4

Ho risolto il problema semplicemente aggiungendo la seguente riga di codice nel file phtml di accesso persistente.

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

1
Grazie per la soluzione Ho perso quasi mezza giornata. E finalmente ho trovato questa soluzione.
Gaurav Agrawal,

3

ok dopo aver lottato per mezz'ora ho scoperto esattamente in quali cartelle login.phtml devo cambiare. Quindi vai a

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

e incolla

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

dopo

<ul class="form-list">

questo è tutto.


3

Se si utilizza la cache di Varnish, potrebbe esserci un problema diverso. Sto citando una soluzione che ho trovato altrove. https://github.com/nexcess/magento-turpentine/issues/169

E qui andiamo ... L'ultima volta che mi è successo questo problema con il login ho notato che avevo "ottenuto" due cookie diversi con lo stesso nome. "Frontend". Tutti i file di questi cookie erano identici tranne che dal campo "domain". Nel primo cookie il valore del dominio era "mydomain.com" mentre nel secondo era "www.mydomain.com". Ciò accade quando un utente non ha già un cookie frontend e digita "mydomain.com" nell'URL del suo browser. Questo innesca il cookie "frontend" difettoso da impostare e rovina le cose! Tornando al nostro server abbiamo una regola che se un utente web colpisce "mydomain.com" per servirgli il "www.mydomain.com". Ciò significa che nel browser dell'utente, nella barra degli indirizzi, l'URL viene trasformato da "miodominio.com" a "www.mydomain.com". Non sono sicuro che ciò abbia a che fare con il problema di accesso. Ne ho appena parlato. Soluzione: Nella configurazione di magento nelle opzioni di memorizzazione nella cache della trementina esiste un'opzione "Normalizza host". Devi abilitarlo. Questo è tutto! Dopo questo niente disordinato nessun doppio frontend cookie! Spero che sia di aiuto!


2

Il motivo di questo problema è che il modulo di accesso personalizzato non contiene alcun form_key e c'è una convalida della chiave del modulo in corso in loginPostAction di Magento.

Puoi ripararlo come di seguito:

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

Trova:

e incollalo subito dopo il codice sopra:

<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
  1. Vai su app / design / frontend / Your-package] / [Your-theme] /template/persistent/customer/form/login.phtml e applica le stesse modifiche.

1

Quanto sopra ha funzionato per me assolutamente bene, ma stavo aggiornando da Magento 1.4.1 a 1.9.1, quindi un grande salto. I file non si trovavano da nessuna parte nella posizione sopra ma si trovavano nella cartella app / design / frontend / BASE.

/ App / design / frontend / base / default / template / persistente / cliente / modulo /

Questa cartella di base contiene molti file comuni da Magento 1.4, quindi ho letto ... Spero che questo salverà a qualcuno le molte ore di lavoro che mi ci sono volute ..


1

Se si utilizza un'estensione di accesso social, aggiungere anche la chiave del modulo nel file login.phtm


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

1

Assicurati che php-mbstring sia installato e abilitato sul tuo server.

In caso contrario, l'accesso dell'amministratore funzionerà mentre il cliente no.

Questo controllo può essere eseguito esaminando l'output phpinfo()o abilitando temporaneamente l'eccezione di accesso intorno alla riga 177in:app/code/core/Mage/Customer/controllers/AccountController.php

Tenere presente che l'operazione può rivelare la password del cliente nella traccia delle eccezioni registrata.


0

Ho avuto lo stesso problema e l'ho risolto eliminando tutti i cookie. Il problema sembra verificarsi se hai più negozi di Magento diversi e accedi ad essi contemporaneamente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.