CakePHP 2: Substituir o método de "senha" do AuthComponent

Meu objetivo é ter um sal único para cada usuário, em vez de apenas usarConfigure::read('Security.salt') para cada usuário.

Eu sei que o CakePHP 2.x não criptografa senhas automaticamente. Isso me permite realizar validação de modelos em senhas, o que é muito bom. No entanto, não vejo uma maneira de substituir o método "password" do AuthComponent. Portanto, mesmo que eu possa controlar como as senhas são criptografadas antes de serem salvas no banco de dados, não posso controlar como as senhas são codificadas ao executar o login real. Do livro de receitas:

Você não precisa digitar senhas antes de ligar$this->Auth->login().

O que posso fazer para fazer$this->Auth->login() usar um método personalizado de hashing de senha?

Obrigado.

ATUALIZAR: Acabei indo com a resposta do dr Hannibal Lecter (criando um objeto de autenticação personalizado). Veja como fazer isso:

Código antigo:

$this->Auth->authenticate = array('Form' => array('fields' => array('username' => 'email')));

Novo código (altere "Form" para "Custom"):

$this->Auth->authenticate = array('Custom' => array('fields' => array('username' => 'email')));

Criar "app / Controller / Component / Auth / CustomAuthenticate.php" e torná-lo assim:

<?php
App::uses('FormAuthenticate', 'Controller/Component/Auth');

class CustomAuthenticate extends FormAuthenticate {
}

Copie os métodos "_findUser" e "_password" de "lib / Cake / Controller / Component / Auth / BaseAuthenticate.php" e cole-os na classe "CustomAuthenticate". Em seguida, faça as seguintes duas modificações no método "_findUser":

Remova esta linha da matriz "$ conditions":$model . '.' . $fields['password'] => $this->_password($password),

mudançaif (empty($result) || empty($result[$model])) { paraif (empty($result) || empty($result[$model]) || $result[$model][$fields['password']] != $this->_password($password, $result[$model]['id'])) {

Em seguida, faça as seguintes duas modificações no método "_password":

Crie o parâmetro "$ id" alterandoprotected function _password($password) { paraprotected function _password($password, $id) {

Atualize o valor do sal mudandoreturn Security::hash($password, null, true); parareturn Security::hash($password, null, Configure::read('Security.salt') . $id);

Por fim, atualize todas as ocorrências deAuthComponent::password usarSecurity::hash com a mesma lógica acima.

questionAnswers(4)

yourAnswerToTheQuestion