2012-05-22 2 views
1

Может ли кто-нибудь сказать мне, что использует следующий оператор и как он работает в Zend Framework?Как setCredentialTreatment работает в рамках Zend

setCredentialTreatment ('SHA1 (CONCAT (?, salt))');

+0

родственный: http://stackoverflow.com/questions/3725873/zend- Auth-setcredentialtreatment –

ответ

2

Попробуйте так:

  $auth = Zend_Auth::getInstance(); 
      $authAdapter = new Zend_Auth_Adapter_DbTable(
       Zend_Db_Table::getDefaultAdapter(), 
       'users', 
       'username', 
       'password', 
       "CONCAT('$this->_salt', sha(?))" 
      ); 
      $authAdapter->setIdentity($username) 
       ->setCredential($password); 
4

setCredentialTreatment сообщает адаптеру auth, как проверить пароль, предоставленный пользователем, в отношении того, что находится в базе данных (или какие-либо пароли проверяются снова). В вашем примере, ? является заполнителем, представляющим пароль, и CONCAT() и SHA1() являются одновременно функциями базы данных. Таким образом, этот пример добавит соль к введенному пользователем паролю и затем хэш их с помощью SHA1.

Это приведет запрос к базе данных, которая выглядит примерно так:

ВЫБРАТЬ идентификатор из пользователей, где электронная почта = «[email protected]» и пароль = SHA1 (CONCAT («пароль», соль))

Вы используете setCredentialTreatment(), чтобы изменить порядок проверки паролей. Например, если ваши пароли только прямые MD5 хэши, вы бы вместо этого использовать:

setCredentialTreatment('MD5(?)'); 
Смежные вопросы