Задать вопрос
@bighoc
php/javascript developer

Как правильно сохранять пароль в Yii2?

Проблема:
В моей таблице User есть поле password_hash.
Я создаю форму в которой юзер сможет менять себе имя емейл и пароль.
Выводя эту форму я не хочу показывать юзеру текущий пароль( тем более его хеш ).
По этому я создал в моделе два свойства

public $password;
    public $password_repeat;
function rules(){
return [ ['password_repeat', 'compare', 'compareAttribute' => 'password']];
}

Вот моя форма
<?php $form = ActiveForm::begin(); ?>


        <?= $form->field($user, 'username') ?>
        <?= $form->field($user, 'email') ?>
        <?= $form->field($user, 'password')->passwordInput() ?>
        <?= $form->field($user, 'password_repeat')->passwordInput() ?>

        <div class="form-group">
            <?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?>
        </div>
    <?php ActiveForm::end(); ?>

Что бы всё это хорошо работало мне пришлось сделать вот что в контроллере:
$user_id = Yii::$app->getUser()->id;
        $user = User::findOne($user_id);
        $post = Yii::$app->request->post();
        if(isset($post['User']['password'])){
            $user->setPassword(Yii::$app->request->post('password'));
            unset($post['User']['password']);
            unset($post['User']['password_repeat']);
        }
        if ($user->load($post) && $user->validate()) { .....

Мне приходиться использовать ансет , в другом случае я получаю ошибку "Password must be repeated exactly." (хотя и ввожу два одинокавых пароль).

Всё это больно похоже на вилосипед.
Вопрос:
Как сделать эту операцию правильно ?

Спасибо
  • Вопрос задан
  • 3683 просмотра
Подписаться 2 Комментировать
Подписчики вопроса 2 К ответам на вопрос (1)