2016-08-10 3 views
2

Am пытается обновить пароли пользователей, но это не удается спасти егоСохранение пароля пользователя в yii2 не удается

Это код контроллера:

public function actionChangepassword($id) { 
    $model = new UserPass(); 
    $user = $this->findModel($id); 

    if ($model->load(Yii::$app->request->post())) { 
     if ($model->validate()) { 
      try { 
       $user->setPassword($_POST['UserPass']['newpass']); 

       if (!$user->save()) { 
        Yii::$app->getSession()->setFlash('success', 'Password changed to '); 
        return $this->redirect(['indexi/'.$user->password]); 
       } else { 
        Yii::$app->getSession()->setFlash('error', 'Password not changed'); 
        return $this->redirect(['index']); 
       } 
      } catch (Exception $e) { 
       Yii::$app->getSession()->setFlash('error', "{$e->getMessage()}"); 
       return $this->render('changepassword', [ 
        'model' => $model 
       ]); 
      } 
     } else { 
      return $this->render('changepassword', [ 
       'model' => $model 
      ]); 
     } 
    } else { 
     return $this->render('changepassword', [ 
      'model' => $model 
     ]); 
    } 
} 

Когда я проверить var_dump($_POST['UserPass']['newpass']) это имеет значение;

При попытке изменения части $user->setPassword($_POST['UserPass']['newpass']);

$modeluser->password = $_POST['UserPass']['newpass']; 

Пароль сохраняется, но не хэшируются,

Что может быть неправильно

Это setpassword функция

public function setPassword($password) 
{ 
    $this->password = Yii::$app->security->generatePasswordHash($password); 
} 
+0

Показать полный код этого действия. – arogachev

+0

Я обновил вопрос –

+1

Думаю, вам не нужно сохранять пароль в качестве пароля, сохраненного в поле 'password_hash', если вы проверите оригинальную расширенную форму входа в шаблоны. Также проверьте, как действие сброса пароля работает в SiteController.php –

ответ

1

1) Изменить

$user->setPassword($_POST['UserPass']['newpass']); 

Для

$user->newpass = $user->setPassword($_POST['UserPass']['newpass']); 

2) Изменить

public function setPassword($password) 
{ 
    $this->password = Yii::$app->security->generatePasswordHash($password); 
} 

Для

public function setPassword($password) 
{ 
    return Yii::$app->security->generatePasswordHash($password); 
} 
0

Лучший способ посмотреть, как это реализовано в преиму ced шаблон.

Смежные вопросы