Я использую Yii Framework и хочу создать систему входа пользователя с перефразированием паролей. поэтому, когда пользователь заходит в систему, он генерирует новую соль и перефразирует пароль новой солью. Я не получаю ошибок, но когда я проверяю пароль и соль, они не меняются в базе данных. вот что я сделал на данный момент:
<?php
/**
* UserIdentity represents the data needed to identity a user.
* It contains the authentication method that checks if the provided
* data can identity the user.
*/
class UserIdentity extends CUserIdentity
{
private $_id;
public function authenticate()
{
$record=User::model()->findByAttributes(array('username'=>$this->username));
if($record===null)
$this->errorCode=self::ERROR_USERNAME_INVALID;
else if($record->password !== hash('sha512', $this->password.Security::Decrypt($record->salt)))
$this->errorCode=self::ERROR_PASSWORD_INVALID;
else
{
while ($record2 !== null){
$salt = Security::GenerateSalt(128);
if ($salt === null)
{
die('can\'t generate salt');
}
$record2 = User::model()->findByAttributes(array('salt'=>Security::Encrypt($salt)));
}
$record->salt = Security::Encrypt($salt);
$record->password = hash('sha512', $this->password.$salt);
$record->save();
$this->_id=$record->id;
$this->setState('user_id', $record->id);
$this->setState('user_username', $record->username);
$this->setState('user_privilages', $record->privilages);
$this->errorCode=self::ERROR_NONE;
}
return !$this->errorCode;
}
public function getId()
{
return $this->_id;
}
}