CakePHP 2: переопределить метод «пароля» AuthComponent

Моя цель - иметь уникальную соль для каждого пользователя, а не просто использоватьConfigure::read('Security.salt') для каждого пользователя.

Я знаю, что CakePHP 2.x больше не хэширует пароли автоматически. Это позволяет мне выполнять проверку модели по паролям, что очень приятно. Тем не менее, я не вижу способа, которым я мог бы переопределить «пароль» AuthComponent's. метод. Поэтому, хотя я могу контролировать, как хешируются пароли до их сохранения в базе данных, я не могу контролировать, как хешируются пароли при выполнении реального входа в систему. Из кулинарной книги:

You don’t need to hash passwords before calling $this->Auth->login().

Что я могу сделать, чтобы сделать$this->Auth->login() использовать собственный метод хеширования пароля?

Благодарю.

UPDATE: Я закончил с ответом доктора Ганнибала Лектера (создание пользовательского объекта аутентификации). Вот как это сделать:

Старый код:

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

Новый код (смените «Форма» на «Пользовательский»):

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

Создать & quot; app / Controller / Component / Auth / CustomAuthenticate.php & quot; и сделать так, чтобы это выглядело так:

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

class CustomAuthenticate extends FormAuthenticate {
}

Скопируйте & quot; _findUser & quot; и & quot; _password & quot; методы из & quot; lib / Cake / Controller / Component / Auth / BaseAuthenticate.php & quot; и вставьте их в & quot; CustomAuthenticate & quot; учебный класс. Затем внесите следующие две модификации в & quot; _findUser & quot; метод:

Remove this line from the "$conditions" array: $model . '.' . $fields['password'] => $this->_password($password),

Change if (empty($result) || empty($result[$model])) { to if (empty($result) || empty($result[$model]) || $result[$model][$fields['password']] != $this->_password($password, $result[$model]['id'])) {

Затем внесите следующие две модификации в & quot; _password & quot; метод:

Create the "$id" parameter by changing protected function _password($password) { to protected function _password($password, $id) {

Update the salt value by changing return Security::hash($password, null, true); to return Security::hash($password, null, Configure::read('Security.salt') . $id);

Наконец, обновите все вхожденияAuthComponent::password использоватьSecurity::hash с той же логикой, что и выше.

Ответы на вопрос(4)

Ваш ответ на вопрос