Русскоязычный форум, посвященный фреймворку Kohana
http://forum.kohanaframework.su/

смена пароля
http://forum.kohanaframework.su/viewtopic.php?f=31&t=667
Страница 1 из 1

Автор:  AlleeX [ 07 июн 2013, 01:36 ]
Заголовок сообщения:  смена пароля

Всем привет!!! Подскажите плиз! Столкнулся с таким вроде элементарным вопросом, необходимо дать возможность смены пароля на сайте пользователю.
Реализовал так.

Код:

    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

Автор:  WinterSilence [ 07 июн 2013, 02:43 ]
Заголовок сообщения:  Re: смена пароля

logout(FALSE, TRUE) или logout(TRUE, TRUE), а потом login($username , $password, TRUE) например подошло бы.
но дело тут скорее всего в фильтре http://kohanaframework.org/3.3/guide-ap ... er#filters
Код:
public function filters()
{
    return array(
        'password' => array(
            array(array(Auth::instance(), 'hash'))
        )
    );
}

т.е. тебе не нужно самостоятельно хэшировать пароль

Автор:  AlleeX [ 08 июн 2013, 19:48 ]
Заголовок сообщения:  Re: смена пароля

WinterSilence писал(а):
т.е. тебе не нужно самостоятельно хэшировать пароль


где именно не нужно самостоятельно хешировать? Я все вроде делаю стандартными средствами коханы

Автор:  WinterSilence [ 08 июн 2013, 19:57 ]
Заголовок сообщения:  Re: смена пароля

AlleeX писал(а):
где именно не нужно самостоятельно хешировать? Я все вроде делаю стандартными средствами коханы

Код:
 $usertemp->password = $auth->hash_password($newpass1, FALSE);

я вот об этом

Автор:  AlleeX [ 08 июн 2013, 20:33 ]
Заголовок сообщения:  Re: смена пароля

WinterSilence писал(а):
AlleeX писал(а):
где именно не нужно самостоятельно хешировать? Я все вроде делаю стандартными средствами коханы

Код:
 $usertemp->password = $auth->hash_password($newpass1, FALSE);

я вот об этом


ОГРОМНОЕ СПАСИБО!!!

Автор:  WinterSilence [ 08 июн 2013, 21:10 ]
Заголовок сообщения:  Re: смена пароля

AlleeX
ладно уж взялся помогать так до победного:
Код:
$user = ORM::factory('User', Auth::instance()->get_user())
    ->find()
    ->update_user($data, array(
        'username',
        'password',
        'email',
    );


http://kohanaframework.org/3.3/guide-ap ... pdate_user

проверка старого пароля нужна когда ты отошел от компа,а кто-то подошел и хочет сменить твой пароль, встречается крайне редко, т.к. этого кого-то легко потом вычислять и по щам надавать.

Но если так хочется, то можешь модифицировать мой пример. не забудь только хэшировать старый пароль полученный от клиента при сравнении Auth->hash($psw). и для проверки тут достаточно простого if

Страница 1 из 1 Часовой пояс: UTC + 4 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/