O login do cliente não funciona na versão 1.9

42

Acabei de fazer uma nova instalação do Magento 1.9.0.1 e estou vendo um comportamento muito estranho no formulário de login do cliente.

No Chrome (versão 36), o formulário de login não funciona. Acabei de ser redirecionado para a página de login. Não há nenhuma mensagem de erro. No entanto, quando abro uma nova janela de navegação anônima, consigo fazer o login muito bem. Pensando que este era um problema de cookie, limpei todos os meus cookies do navegador e tentei novamente e obtive os mesmos resultados. Nos dois casos, consigo acessar o painel de administração sem problemas.

Eu também tentei isso no Firefox e no Safari. Firefox Eu via a mesma coisa (mas não de forma consistente e eu poderia corrigi-lo limpando os cookies) e não conseguia replicar no Safari.

Eu nunca tive um problema com isso em qualquer outra versão do Magento. Existe algum tipo de mudança fundamental na maneira como o Magento lida com cookies na versão 1.9 e / ou há algo que eu posso fazer para tornar isso mais estável?

Josh Pennington
fonte
u pode compartilhar o link e usuário de teste / pass
MTM
Infelizmente, tudo está atrelado à VPN do meu trabalho.
21413 Josh Pennington
Reinstale o Chrome e verifique.
Niloct 11/08/14
Mesmos resultados após a reinstalação.
21414 Josh Pennington
1
Eu já estava tendo um problema semelhante no site de clientes, o problema era que, quando o site foi acessado sem, wwwpor exemplo abc.com, foi redirecionado para www.abc.com. Nesse caso, o navegador estava configurando os cookies para os dois e os logins pararam de funcionar, mas se eu excluir manualmente o cookie que estava sem wwwos logons, começamos a funcionar novamente.
MTM

Respostas:

38

Eu tive o mesmo problema....

A resposta é que seu tema não fornece uma variável chamada form_key.

Assim como dito acima, devo acrescentar:

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

você adiciona logo depois <ul class="form-list">

para cada um dos meus login.phtmlarquivos para o tema.

Você também pode ter problemas com a quantidade de atualização dos itens do carrinho

Aqui está a importância de form_keys:

Desde o início dos tempos, o back-end do Magento continha uma chave de formulário que protegia contra ataques XSS [1]. Com o Magento 1.8, a chave do formulário entrou no frontend pelo mesmo motivo: para se proteger contra o envio de formulários de outro site, usando seu navegador. um invasor mal-intencionado pode adicionar itens ao seu carrinho enquanto você estiver em uma guia diferente do navegador ou até mesmo concluir um pedido. Isso depende de URLs previsíveis, porque o site não terá acesso ao conteúdo HTML real na guia do navegador onde você tem o seu pedido Magento em espera. Tudo o que é enviado para a loja Magento enviará seus cookies e, portanto, usará sua sessão.

Ao adicionar uma chave exclusiva a cada formulário ou a cada link que gera uma ação no servidor, o conteúdo da URL ou do formulário deixa de ser previsível. A chave do formulário é armazenada nos dados da sessão e validada após o envio ao servidor. Se eles não corresponderem, você receberá um erro de chave do formulário e a ação não será concluída.

BWalt
fonte
3
Adicione o acima "form_key" entrada escondida para a forma localizada: app / design / frontend / base / default / template / persistente / checkout / onepage / login.phtml
Flipmedia
5
Um trecho de código muito melhor para usar seria <?php echo $this->getBlockHtml('formkey'); ?>em vez da entrada grande.
Navarr
Cole isso antes da tag de fechamento do formulário <? Php echo $ this-> getBlockHtml ('formkey'); ?>
Tahir Yasin
linda, isso funcionou para mim. Muito obrigado por votar!
CodingMageSheen
Olá, eu procurei tanto por isso>. <! Muito obrigado!
Keenora Fluffball
8

Pode ser:

cookie setting issue in Chrome browser

OU

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

Por Post actionisso verifique a chave de forma using function _validateFormKey()a controlador

form key issue: form key missing então adicione esse código no seu formulário

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

OU

Cookie domain setting issue configuração de verificação de goto é adequada ou não

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

Amit Bera
fonte
1
O formulário de login já possui o campo form_key e eu defino o domínio do cookie e isso também não foi corrigido.
21413 Josh Pennington
por favor, bolinho de exclusão a partir do navegador Ou Goto accountcontroller.php verificação if ($ this -> _ validateFormKey ()) {está funcionando ou não
Amit Bera
A chave do formulário está validando corretamente. De fato, parece que o loginPostAction está funcionando perfeitamente.
21713 Josh Pennington
1
@AmitBera Devo encontrar você no Magento Chat? Tenho um problema relacionado no módulo da lista de desejos?
Butterfly
@AmitBera Eu defini a chave, mas ainda não está funcionando. Também em accountcontroller.php if (!$this->_validateFormKey()) {retorna false, o que significa que o Magento não pode validar a chave fornecida. Alguma idéia de por que isso acontece?
precisa saber é o seguinte
6

Como o problema parece estar relacionado ao cookie, tente aumentar o tempo de vida do cookie para 86400 em

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


O motivo pode ser que, por padrão, o tempo de vida do cookie esteja definido como 3600 (1 hora). Mas se o tempo do computador do usuário final ultrapassar o tempo do servidor, os cookies não serão definidos para o front-end do Magento e para o back-end. Por exemplo, o tempo do computador do usuário final é 1 hora antes do tempo do servidor, o que significa que o cookie (contendo a ID da sessão do usuário) expirará assim que o usuário efetuar login ou tentar adicionar um item.

Anshu Mishra
fonte
4

Para futuros leitores: existem muitas causas possíveis para esse problema. Durante o logon, algum log de exceção é suprimido por razões de segurança; portanto, seu problema não será exibido var/log/exception.log.

Para diagnosticar seu problema:

  1. Abra app/code/core/Mage/Customer/controllers/AccountController.phpe vá para o loginPostActionmétodo
  2. Descomente temporariamente a Mage::logException($e);chamada e salve a alteração
  3. Tente fazer login no front-end novamente para acionar a mesma exceção.
  4. Veja os últimos erros no log de exceções e investigue-os.
  5. Repita as duas etapas anteriores até que nenhuma exceção seja lançada.

Não se esqueça de desfazer as alterações no app/code/core/Mage/Customer/controllers/AccountController.php!

A causa do meu problema foi que uma classe falhou ao carregar automaticamente porque o módulo (incorretamente) o <codePool>community</codePool>substituiu <codePool>local</codePool>.

Walf
fonte
Eu tentei sua solução, mas não há exceção.log sendo criado, embora eu não possa fazer login!
Jon
4

Corrigi o problema adicionando a linha de código abaixo no arquivo phtml de login persistente.

<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
Vinay Sikarwar
fonte
1
Obrigado pela solução. Eu perdi quase meio dia com isso. E finalmente encontrei esta solução.
Gaurav Agrawal
3

ok depois de lutar por meia hora eu descobri exatamente em quais pastas login.phtml eu tenho que mudar. Então vá para

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

e cole

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

depois de

<ul class="form-list">

é isso aí.

amyogiji
fonte
3

Se você estiver usando o cache do Varnish, pode haver um problema diferente. Estou citando uma solução que encontrei em outro lugar. https://github.com/nexcess/magento-turpentine/issues/169

E aqui vamos nós ... A última vez que me ocorreu esse problema com o login, notei que havia "recebido" dois cookies diferentes com o mesmo nome. "Frontend". Todos os arquivos desses cookies eram idênticos, exceto o campo "domain". No primeiro cookie, o valor do domínio era "mydomain.com", enquanto no segundo era "www.mydomain.com". Isso acontece quando um usuário ainda não possui um cookie de front-end e digita "mydomain.com" na URL do navegador. Isso aciona o cookie "frontend" defeituoso a ser configurado e bagunça tudo! De volta ao nosso servidor, temos uma regra de que, se um usuário da Web clicar em "meudomínio.com" para servi-lo como "www.meudominio.com.br". Isso significa que, no navegador do usuário, na barra de endereço, o URL é alterado de "meudominio.com" para "www.meudominio.com". Não tenho certeza de que isso tenha algo a ver com o problema de logon. Eu apenas mencionei isso. Solução: Na configuração do magento, nas opções de armazenamento em turpentine, existe a opção "Normalizar host". É necessário habilitá-lo. Depois disso, nada bagunçado, sem cookies de front-end duplos! Espero que isto ajude!

Haim
fonte
2

A razão para esse problema é que o formulário de login personalizado não contém nenhuma chave_formulário e há uma validação de chave de formulário acontecendo no loginPostAction do Magento.

Você pode corrigi-lo como abaixo:

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

Encontrar:

e cole isso logo após o código acima:

<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
  1. Vá para app / design / frontend / Your-package] / [Your-theme] /template/persistent/customer/form/login.phtml e aplique as mesmas alterações.
Jameslj
fonte
1

O acima funcionou para mim absolutamente bem, mas eu estava atualizando do Magento 1.4.1 para 1.9.1, então um grande salto. Os arquivos não foram encontrados em nenhum lugar no local acima, mas estavam localizados na pasta app / design / frontend / BASE.

/ app / design / front-end / BASE / padrão / modelo / persistente / cliente / formulário /

Esta pasta base contém muitos arquivos comuns desde o Magento 1.4, então eu li ... Espero que isso poupe a alguém as muitas horas de trabalho que me levou.

Mateus
fonte
1

Se você estiver usando qualquer extensão de login social, adicione também a chave de formulário nesse arquivo login.phtm

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

Verifique se o php-mbstring está instalado e ativado no seu servidor.

Caso contrário, o login do administrador funcionará enquanto o cliente não.

Essa verificação pode ser feita examinando a saída phpinfo()ou ativando temporariamente a exceção de login em torno da linha 177:app/code/core/Mage/Customer/controllers/AccountController.php

Esteja ciente de que a operação pode divulgar a senha do cliente no rastreamento de exceção registrada.

versedi
fonte
0

Eu tive o mesmo problema e resolvi-o excluindo todos os cookies. O problema parece acontecer se você tiver várias lojas de magento diferentes e fizer login com elas ao mesmo tempo.

Preto
fonte