Всем привет!!! Подскажите плиз! Столкнулся с таким вроде элементарным вопросом, необходимо дать возможность смены пароля на сайте пользователю.
Реализовал так.
Код:
public function saveNewPass($oldpass, $newpass1, $newpass2)
{
$vData = array("oldpass" => $oldpass, "newpass1" => $newpass1, "newpass2" => $newpass2,);
$validation = Validation::factory($vData);
//правила валидации для старого и нового паролей
$validation->rule('oldpass', 'not_empty'); //не пустой
$validation->rule('oldpass', 'alpha_numeric');//только буквы и цифры
$validation->rule('oldpass', 'min_length', array(':value', '3'));//мин длина 3
$validation->rule('oldpass', 'max_length', array(':value', '64'));//макс длина 64
$validation->rule('oldpass', array($this, 'checkOldPass')); //существует ли
$validation->rule('newpass1', 'not_empty');
$validation->rule('newpass1', 'alpha_numeric');
$validation->rule('newpass1', 'matches', array(':validation', 'newpass1', 'newpass2'));
$validation->rule('newpass1', 'min_length', array(':value', '3'));//мин длина 3
$validation->rule('newpass1', 'max_length', array(':value', '64'));//макс длина 64
$validation->rule('newpass1', 'matches', array(':validation', 'newpass1', 'newpass2')); //совпадают ли пароли
if(!$validation->check())
{
$this->errors = $validation->errors('validation');
return FALSE;
}
$auth = Auth::instance();
$userId = $auth->get_user();
$usertemp = ORM::factory('user', array('id'=>$userId));
//если нет ошибок хэшируем пароль и сохраняем
$usertemp->password = $auth->hash_password($newpass1, FALSE);
$usertemp->save();
return TRUE;
//echo $usertemp->password;
//echo $newpass1;
}
Проблемка в том, что с генерированный хэш не совпадает (если меняешь на такой же для теста пароль) со старым(при авторизации). Соответственно после такой смены уже нельзя авторизоваться на сайте. В чем может быть беда????? Вроде и исходники перерыл, и на официалке смотрел.
Вот конфиг
Код:
return array(
'driver' => 'ORM',
'hash_method' => 'sha256',
'hash_key' => 'bla bla bla',
'lifetime' => 1209600,
'session_type' => Session::$default,
'session_key' => 'auth_user',
);
Вот к примеру хеш пароля 11111111 при регистрации:
8d3c526501d9dcc92c922417bd89f10b5aa552587d7a1c89a09bcee46c3e36a3
а вот после смены на тот же 11111111
0817faa7ee3c23c253371b1e045198fca3a48172065c3350f20c9168393f6ea7