Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 27 апр 2024, 23:30

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: смена пароля
СообщениеДобавлено: 07 июн 2013, 01:36 
Не в сети
Новичок

Зарегистрирован: 05 мар 2013, 12:22
Сообщения: 11
Всем привет!!! Подскажите плиз! Столкнулся с таким вроде элементарным вопросом, необходимо дать возможность смены пароля на сайте пользователю.
Реализовал так.

Код:

    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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: смена пароля
СообщениеДобавлено: 07 июн 2013, 02:43 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
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'))
        )
    );
}

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

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: смена пароля
СообщениеДобавлено: 08 июн 2013, 19:48 
Не в сети
Новичок

Зарегистрирован: 05 мар 2013, 12:22
Сообщения: 11
WinterSilence писал(а):
т.е. тебе не нужно самостоятельно хэшировать пароль


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: смена пароля
СообщениеДобавлено: 08 июн 2013, 19:57 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
AlleeX писал(а):
где именно не нужно самостоятельно хешировать? Я все вроде делаю стандартными средствами коханы

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

я вот об этом

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: смена пароля
СообщениеДобавлено: 08 июн 2013, 20:33 
Не в сети
Новичок

Зарегистрирован: 05 мар 2013, 12:22
Сообщения: 11
WinterSilence писал(а):
AlleeX писал(а):
где именно не нужно самостоятельно хешировать? Я все вроде делаю стандартными средствами коханы

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

я вот об этом


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: смена пароля
СообщениеДобавлено: 08 июн 2013, 21:10 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
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

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 72


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group