Fórum OpenCart Brasil

Por um e-commerce livre, confiável e profissional

Suporte geral sobre problemas técnicos para OpenCart v2.x.
Por RPHP
#67108
Estou com o seguinte problema:
Ao tentar solicitar uma nova senha para um cliente cadastrado na Loja o Email com o link de solicitação de nova senha chega normalmente na minha caixa de email e o link redireciona também normalmente para a pagina da minha Loja para digitar a nova senha. O problema acontece quando vou tentar me logar com a nova senha, é retornado um aviso de que o usuário é invalido. Fazendo alguns testes descobri que o que acontece é que a senha antiga ainda continuava funcionando e a nova não foi adicionada. Alguém poderia me ajudar ?
Desde já obrigado!
Por RPHP
#67681
Bom dia pessoal. Já fiz vários testes aqui para tentar descobrir o porque a senha não é modificada, mas sem sucesso!
Alguém tem alguma informação sobre esse problema?
Desde já Obrigado!
#70466
Olá, tive o mesmo problema aqui! O e-mail chega ok, você troca a senha mas ele não atualiza no banco...

Solucionei da seguinte forma:
O arquivo que controla o reset, quando preenche a nova senha e envia é: catalog/controller/account/reset.php

Neste arquivo ele faz o load do model account/customer e usa a função editPassword, é a função usada para mudar a senha quando o usuário esta logado, mas ela recebe como parametro email e a nova senha, e usa na query o email para achar o usuario e trocar a senha. O problema é que quando é pra resetar a senha ele está passando o id como parametro, não o email.

Logo eu criei uma função resetPassword que usa o id e problema resolvido.

Solução:
Em catalog/model/account/customer.php adicione logo após isto:
Código: Selecionar todos
public function editPassword($email, $password) {
		$this->db->query("UPDATE " . DB_PREFIX . "customer SET salt = '" . $this->db->escape($salt = token(9)) . "', password = '" . $this->db->escape(sha1($salt . sha1($salt . sha1($password)))) . "', code = '' WHERE LOWER(email) = '" . $this->db->escape(utf8_strtolower($email)) . "'");
}
Isto:
Código: Selecionar todos
public function resetPassword($customer_id, $password) {
		$this->db->query("UPDATE " . DB_PREFIX . "customer SET salt = '" . $this->db->escape($salt = token(9)) . "', password = '" . $this->db->escape(sha1($salt . sha1($salt . sha1($password)))) . "', code = '' WHERE customer_id = '" . (int)$customer_id . "'");
}
E em catalog/controller/account/reset.php troque isto:
Código: Selecionar todos
$this->model_account_customer->editPassword($customer_info['customer_id'], $this->request->post['password']);
Por isto:
Código: Selecionar todos
$this->model_account_customer->resetPassword($customer_info['customer_id'], $this->request->post['password']);
Versão do opencart: 2.2.0.0

Espero ter ajudado.