Re: Форма входа

Ну вот значит всё работает. openpass записывается Ваш созданный пароль который генерируется.
Вам осталось проверить ещё на приходящую из запроса Вашу галочку. Что у Вас не работает?

27 Отредактировано Андрей (07.07.2016 15:28:05)

Re: Форма входа

Закусило Александр пишет:

Ну вот значит всё работает. openpass записывается Ваш созданный пароль который генерируется.
Вам осталось проверить ещё на приходящую из запроса Вашу галочку. Что у Вас не работает?

А для чего проверять на это галочку?
А на каком же тогда этапе пароль должен записываться в поле pass?
Не понимаю что то я

Повысить оценку Понизить оценку

Re: Форма входа

А для чего проверять на это галочку?

Потому, что запись в пользователя в БД может происходить и через админку. Вот представьте вы создаёте в админ панели пользователя указываете у него пароль. А он потом не подходит. Для этого и нужна проверка на галочку. Или программно создаёте пользователя, хотите присвоить ему пароль и никак не получается. Проверьте на параметр в посте.

А на каком же тогда этапе пароль должен записываться в поле pass?
Не понимаю что то я

На этом этапе Вы и передаёте пароль для записи. Просто генерируете его самостоятельно. Ведь Вы же так хотели.

29 Отредактировано Андрей (07.07.2016 16:19:19)

Re: Форма входа

Да именно так, но если смотреть в var_dump то
["pass"]=>
      NULL

в базу ничего не передается, почему?

значит мне в форму регистрации нужно вставить данный код?
а что тогда использовать вместо? <input type="checkbox" name="reg_autologin" {if $order.reg_autologin}checked{/if} value="1" id="reg-autologin">

                <tr>
                    <td class="key">Пароль:</td>
                    <td class="value">
                        <input type="checkbox" name="reg_autologin" {if $order.reg_autologin}checked{/if} value="1" id="reg-autologin">
                        <label for="reg-autologin">Получить автоматически на e-mail</label>
                        <div class="help">Нужен для проверки статуса заказа, обращения в поддержку, входа в кабинет</div>
                        <div id="manual-login" {if $order.reg_autologin}style="display:none"{/if}>
                            <div class="inline f">
                                {$order.__reg_openpass->formView(['form'])}
                                <div class="help">Пароль</div>
                            </div>
                            <div class="inline">
                                {$order.__reg_pass2->formView()}
                                <div class="help">Повтор пароля</div>
                            </div>
                            <div class="inline">
                                <div class="form-error">{$order->getErrorsByForm('reg_openpass', ', ')}</div>
                            </div>
                        </div>
                    </td>
                </tr>

Повысить оценку Понизить оценку

30 Отредактировано Закусило Александр (07.07.2016 16:21:50)

Re: Форма входа

Потому что в объектах используются функции beforeWrite(перед записью в БД) и afterWrite(После записи в БД) в которых и происходят все дейтсвия. Если вы откроете класс \Users\Model\Orm\User (/modules/users/model/orm/user.inc.php) и посмотрите в метод
beforeWrite.
То там задаётся сам пароль вот так:

if (!empty($this['openpass'])) {
      $this['pass'] = self::cryptPass($this['openpass']);
}

Т.е. если задан openpass, что Вы и делаете в хуке, то pass будет сформирован из него.
Мы не храним в открытом виде пароли в БД.

31 Отредактировано Закусило Александр (07.07.2016 16:24:27)

Re: Форма входа

значит мне в форму регистрации нужно вставить данный код?
а что тогда использовать вместо? <input type="checkbox" name="reg_autologin" {if $order.reg_autologin}checked{/if} value="1" id="reg-autologin">

Да, только проверка там не нужна на if ведь объекта $order просто в том шаблоне у Вас не существует. И сделайте name другой например просто my_autologin, чтобы не пересеклось ни где. А потом в хуке на него и проверите.

32 Отредактировано Андрей (07.07.2016 17:34:08)

Re: Форма входа

Вставляю следующий код в свою форму но пароль не записывается в бд. где искать ошибку

             <tr>
                    <td class="key">Пароль:</td>
                    <td class="value">
                        <input type="checkbox" name="my_autologin" checked value="1" id="my-autologin">
                        <label for="my-autologin">Получить автоматически на e-mail</label>
                        <div class="help">Нужен для проверки статуса заказа, обращения в поддержку, входа в кабинет</div>
                        <div id="manual-login" style="display:none">
                            <div class="inline f">
                                <input name="openpass" value="" maxlength="70"  size="18" type="password" />
                                <div class="help">Пароль</div>
                            </div>
                            <div class="inline">
                                <input name="openpass_confirm" value="" maxlength="70"  size="18" type="password" />
                                <div class="help">Повтор пароля</div>
                            </div>
                        </div>
                    </td>
                </tr>

Повысить оценку Понизить оценку

33 Отредактировано Закусило Александр (07.07.2016 19:33:22)

Re: Форма входа

Попробуйте в Вашем хуке beforeWrite выполнить сразу после установки openpass

/**
* Действия перед записью объекта пользователя
* 
* @param array $data - Массив  с данными
*/
public static function ormBeforeWriteUsersUser($data){
     /**
     * @var \User\Model\Orm\User
     */
     $user = $data['orm'];
     $flag  = $data['flag']; //Флаг insert или update
     if ($flag==$user::INSERT_FLAG){ //Делаем только на создание (insert)
          $my_autologin = \RS\Http\Request::commonInstance()->request('my_autologin', TYPE_INTEGER, false); //Получаем флаг из запроса
          if ($my_autologin){ //Если флаг стоит

              $user['pass'] = $user::cryptPass(\RS\Helper\Tools::generatePassword(6));
          }

     }
}

Я думаю, тогда 100% всё будет как надо.

34 Отредактировано Андрей (08.07.2016 11:05:48)

Re: Форма входа

Закусило Александр пишет:

Попробуйте в Вашем хуке beforeWrite выполнить сразу после установки openpass

/**
* Действия перед записью объекта пользователя
* 
* @param array $data - Массив  с данными
*/
public static function ormBeforeWriteUsersUser($data){
     /**
     * @var \User\Model\Orm\User
     */
     $user = $data['orm'];
     $flag  = $data['flag']; //Флаг insert или update
     if ($flag==$user::INSERT_FLAG){ //Делаем только на создание (insert)
          $my_autologin = \RS\Http\Request::commonInstance()->request('my_autologin', TYPE_INTEGER, false); //Получаем флаг из запроса
          if ($my_autologin){ //Если флаг стоит

              $user['pass'] = $user::cryptPass(\RS\Helper\Tools::generatePassword(6));
          }

     }
}

Я думаю, тогда 100% всё будет как надо.

Вот сейчас пароль записывается в БД, но на почту поле пароль приходит пустое.

Что же получается нужен хук после записи обьекта?Вот я его создал, но допустил ошибку и выдает ошибку 500 при регистрации

    /**
    * Действия после записи объекта
    * 
    * @param string $flag - insert или update
    */
public static function ormAfterWriteUsersUser($data){
    /**
     * @var \User\Model\Orm\User
     */
     $user = $data['orm'];
     $flag  = $data['flag']; //Флаг insert или update
             if ($flag == self::INSERT_FLAG && \Setup::$INSTALLED && !$this['no_send_notice']) {
            
            // Уведомление пользователю
            $user = new \Users\Model\Notice\UserRegisterUser;
            $user->init($this, $this['openpass']);
            \Alerts\Model\Manager::send($user); 
            
        }

} 

Повысить оценку Понизить оценку

Re: Форма входа

Чтобы видеть ошибки, а не 500-ю включите отображение ошибок:
http://readyscript.ru/faq/#faq-errors

 $user = $data['orm'];
 $flag  = $data['flag']; //Флаг insert или update
 if ($flag == self::INSERT_FLAG && \Setup::$INSTALLED && !$this['no_send_notice']) {
            
 // Уведомление пользователю
 $user = new \Users\Model\Notice\UserRegisterUser;
 $user->init($this, $this['openpass']);
 \Alerts\Model\Manager::send($user); 

Что касается уведомления, то Вы переприсвоили переменной $user, объект самого уведомления и передали объект самого себя, а не пользователя. Зачем?
Вам в Уведомдение нужно передать объект пользователя который вы получаете из объекта $data выше.

Нужно же так:)

 $user = $data['orm'];
 $flag  = $data['flag']; //Флаг insert или update
 if ($flag == $user::INSERT_FLAG && \Setup::$INSTALLED && !$user['no_send_notice']) {
            
 // Уведомление пользователю
 $user_notice = new \Users\Model\Notice\UserRegisterUser;
 $user_notice->init($user, $user['openpass']);
 \Alerts\Model\Manager::send($user_notice); 

36 Отредактировано Андрей (08.07.2016 14:01:42)

Re: Форма входа

Не помогло, все равно не показывает пароль. Единственное что стало, так это два письма приходить
Можно конечно сделать так, но им тогда хеш будет зашифрованный пароль присылаться.
Какой еще есть вариант?

$user['openpass'] = $user['pass'] = $user::cryptPass(\RS\Helper\Tools::generatePassword(6));

Повысить оценку Понизить оценку

Re: Форма входа

Да точно! здесь же у нас идёт на прямую запись. Я думаю Вот так поможет.
изменить

$user['pass'] = $user::cryptPass(\RS\Helper\Tools::generatePassword(6));

на

$user['openpass'] = \RS\Helper\Tools::generatePassword(6);
$user['pass'] = $user::cryptPass();

Ато у нас получается [b]openpass[/b] поэтому и пустой, что нигде не присваивается.

38 Отредактировано Андрей (08.07.2016 14:56:56)

Re: Форма входа

Да, так работает smile И сразу же исчесла проблема с переадрисацией на страницу регистрации. Теперь все как надо, сразу авторизовывает.
Только почему то регистрация работает, если только заккоментирована вот эта строчка из user.inc.php

Checker' => array(array(__CLASS__, 'checkOpenPassword'), '')

Не хватает какой то проверки?

Повысить оценку Понизить оценку

Re: Форма входа

Он вызывает из этого же класса функцию checkOpenPassword, посмотрите что в ней.

40 Отредактировано Андрей (08.07.2016 17:11:16)

Re: Форма входа

Заметил следующий баг. Если выйти из профиля и попытатся зайти, пишет неверный e-mail или пароль. А если не вводить пароль то авторизовывает. И это только с теми аккаунтами, которые зарегистрированы данным методом(автоматическим паролем)

Повысить оценку Понизить оценку

Re: Форма входа

Ну всё дело в том я так думаю, про то что я говорил, что нужно проверять на флажок приходящий из поста о том, что нужно генерировать пароль.
Вы можете свой код закомментировать и попробовать туже схему. Я думаю всё будет как надо. Т.е. Вам не хватает проверок на то, что именно сейчас делается с пользователем. Попробуйте завардампить объекты в Вашем коде и приходящий POST или GET запрос, чтобы проанализировать.

42 Отредактировано Андрей (11.07.2016 12:09:00)

Re: Форма входа

Закусило Александр пишет:

Ну всё дело в том я так думаю, про то что я говорил, что нужно проверять на флажок приходящий из поста о том, что нужно генерировать пароль.
Вы можете свой код закомментировать и попробовать туже схему. Я думаю всё будет как надо. Т.е. Вам не хватает проверок на то, что именно сейчас делается с пользователем. Попробуйте завардампить объекты в Вашем коде и приходящий POST или GET запрос, чтобы проанализировать.

Думаю я с этим уже не справлюсь. Давайте  тогда по другому решим этот вопрос

Повысить оценку Понизить оценку