Доброго времени суток.
Застрял на моменте проверки повторно введенного пароля, с учетом хеширования. Выдает несоответствие.
Подробнее. Контроллер:
public function actionRegistration() {
if (!Yii::$app->user->isGuest) {
return $this->redirect('/');
}
$model = new User();
if ($model->load(Yii::$app->request->post())) {
if (!User::find()->where(['username' => $model->username])->limit(1)->all()) {
$model->setPassword($model->password);
if ($model->save()) {
$login = new LoginForm();
$login->username = $model->username;
$login->password = $model->password;
$login->login();
return $this->redirect('/page/contact');
} else {
Yii::$app->session->setFlash('er', "Произошла ошибка, введите данные повторно.");
}
} else {
Yii::$app->session->setFlash('exist', "Пользователь с таким именем существует.");
}
}
return $this->render('registration', compact('model'));
}
В модели User.
public function rules()
{
return [
['username', 'required', 'message' => 'Поле является обязательным.'],
['password', 'required', 'message' => 'Поле является обязательным.'],
['username', 'unique', 'message' => 'Пользователь с таким логином существует.'],
['password', 'string', 'min' => 6],
['password_repeat', 'required'],
['password_repeat', 'compare', 'compareAttribute'=> 'password'],
[['created_at', 'invite'], 'safe'],
];
}
public function setPassword($password) {
$this->password = Yii::$app->security->generatePasswordHash($password);
}
public function validatePassword($password)
{
return Yii::$app->security->validatePassword($password, $this->password);
}
Что я получаю на выходе:
1) Пароль хешируется на этапе setPassword
2) Повторный пароль остается без хеширования.
3) Сравнение не проходит.
Какие глупости пробовал:
1) Хешировал password_repeat и сравнивал c password. Логично, что ничего не получилось.
2) Кружил вокруг validatePassword, но ничего не получил. Видимо совсем закружился.