Произвольная хэш функция для аутентификации в CakePHP
Разработчикам чаще приходится не создавать веб-приложения с нуля, а дорабатывать существующие или по крайней мере использовать бд, которая используется совместно с другими приложениями. И скорее всего в таком случае задача хранения пароля пользователя решалась несколько по-другому, чем по умолчанию предполагается в CakePHP. Например, хэш вычисляется по фунции
sha1(md5(‘SeCrEt’ . $password . ‘KeY’)).
Как с этим жить?
CakePHP хранит пароли следующим образом: поле пароля в БД = самый стойкий из доступных хэшей(открытый пароль + секретная соль)
Но на наш случай у компонента Auth припасено свойство authenticate (см. http://api.cakephp.org/class/auth-component) — ссылка на объект, который реализует функцию hashPassword.
И, собственно говоря, пример:
в файле app_controller.php помещаем класс для нашей хэш функции
class MyHash {
public function hashPasswords($data) {
if (is_array($data) && isset($data[‘User’])) {
if (isset($data[‘User’][‘username’]) && isset($data[‘User’][‘password’])) {
$data[‘User’][‘password’] = sha1( md5 (‘SeCrEt’ . $data[‘User’][‘password’] . ‘KeY’) );
}
}
return $data;
}
}
а в функции AppController::beforeFilter пишем строчку
$this->Auth->authenticate = new MyHash();
Готово!