Il mio obiettivo è avere un sale unico per ogni utente piuttosto che usare semplicemente Configure::read('Security.salt')
per ogni utente.CakePHP 2: Sovrascrivi il metodo "password" di AuthComponent
So che CakePHP 2.x non blocca più automaticamente le password. Questo mi consente di eseguire la convalida del modello sulle password, che è molto bella. Tuttavia, non vedo il modo in cui posso ignorare il metodo "password" di AuthComponent. Pertanto, anche se riesco a controllare il modo in cui le password vengono sottoposte all'hash prima di essere salvate nel database, non riesco a controllare il modo in cui le password vengono sottoposte a hash quando si esegue il login effettivo. Dal libro di cucina:
Non c'è bisogno di hash delle password prima di chiamare
$this->Auth->login()
.
Cosa posso fare per rendere $this->Auth->login()
utilizzare un metodo personalizzato di hashing della password?
Grazie.
UPDATE: Ho finito per andare con la risposta del dr Hannibal Lecter (creazione di un oggetto di autenticazione personalizzato). Ecco come fare:
vecchio codice:
$this->Auth->authenticate = array('Form' => array('fields' => array('username' => 'email')));
Nuovo codice (cambiamento "Form" a "Custom"):
$this->Auth->authenticate = array('Custom' => array('fields' => array('username' => 'email')));
Crea "app/Controller/Component/Auth/CustomAuthenticate.php "e farlo sembrare come questo:
<?php
App::uses('FormAuthenticate', 'Controller/Component/Auth');
class CustomAuthenticate extends FormAuthenticate {
}
Copiare il "_findUser" e "" metodi da" _password lib/Pasticceria/controller/Com ponent/Auth/BaseAuthenticate.php "e incollarli nella classe" CustomAuthenticate ". Poi fare le seguenti due modifiche al metodo "_findUser":
rimuovere questa riga dalla matrice "condizioni $":
$model . '.' . $fields['password'] => $this->_password($password),
Change
if (empty($result) || empty($result[$model])) {
aif (empty($result) || empty($result[$model]) || $result[$model][$fields['password']] != $this->_password($password, $result[$model]['id'])) {
Poi fare le seguenti due modifiche al metodo "_password":
creare il parametro "$ id" modificando
protected function _password($password) {
aprotected function _password($password, $id) {
Aggiornare il valore sale modificando
return Security::hash($password, null, true);
areturn Security::hash($password, null, Configure::read('Security.salt') . $id);
Infine, aggiornare tutte le occorrenze di AuthComponent::password
da utilizzare Security::hash
con la stessa logica sopra.
Che ha funzionato! Ho aggiornato la mia domanda con il codice pertinente. Grazie! – Nick