Cliente existente de Importação, incluindo MD5 hash de senha
-
12-12-2019 - |
Pergunta
Eu tenho os dados existentes do cliente, que inclui endereços de e-mail e senhas (já MD5 hash.)
Posso importar estes dados para o Magento, mantendo os clientes existentes senhas?
Será uma substituição do Magento cliente de autenticação de classe necessária?
Solução
Você não precisa modificar o Magento autenticação de classes.Você pode importar senhas já MD5 criptografados.Eu testei isso.
Primeiro, um olhar como o Magento CE armazena senhas
salt = gg6s1b3f9s4dd (randomly generated every time a password is changed)
password = mypassword2015 (chosen by customer)
Encrypted Password = md5(salt.password).":".salt
Explained as .....
Step 1: md5(gg6s1b3f9s4ddmypassword2015).":".salt
Step 2: 7df0a5d9d07a06db6c7022d1e6ea2a57.":".salt
Final Result: 7df0a5d9d07a06db6c7022d1e6ea2a57:gg6s1b3f9s4dd
Where the first string is the MD5 password with the salt,
and after the : is the salt that was used.
Portanto para importar um já criptografadas de senhas MD5
MD5_Password: a230b06a0387f5c697f08d83517cbb5d
Step 1: MD5_Password.":"
Final Result: a230b06a0387f5c697f08d83517cbb5d:
Podemos ver que o Magento procura por um ":" (dois pontos) na cadeia, e assume o que vem depois é o Sal.Se você colocar um ":" (dois pontos) no final do seu já de palavra-passe encriptada e, em seguida, nada mais, Magento vai perceber que não há sal para essa palavra-passe.
TL;DR Basta adicionar um ":" (dois pontos) para o final de seu já MD5 palavra-passe encriptada.
Obter a palavra-passe para Magento
Tudo bem, então agora nós sabemos o que precisamos fazer para nossas senhas, como podemos obtê-los em Magento?Normalmente Magento irá criptografar automaticamente uma senha que você dê a ele, mas no nosso caso, nós NÃO queremos isso, porque ela já está feita.
Acontece, isso é simples demais!Quando criar ou actualizar uma já existente do cliente pelo código que você normalmente usa para definir a sua palavra-passe:
$customer->setPassword("Plain Text Password");
Basta que substitua
$customer->setPasswordHash("Already Encrypted Password");
Outras dicas
Magento CE usa um sal de hash MD5.
Você precisa over-ride Mage_Customer_Model_Session::login()
ou Mage_Customer_Model_Customer::validatePassword
adaptar para os diferentes senhas.
O que disse, a alteração de métodos de autenticação de senha é uma péssima idéia. Considerar apenas ter seus clientes redefinir suas senhas em vez disso.
Além disso, o fato de que o Magento usa o MD5 no CE e SHA2 na EE é uma piada.MD5 é ruim e inseguro.Eu acho que só EE clientes em us $15K+ por licença de obter segurança adequada.
Magento é a forma fora de linha aqui.