Не работает смена пароля.

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Не работает смена пароля.

Сообщение Artikk »

Здравствуйте. Пароль меняется хешированный, но когда пытаюсь зайти - пишет не верный пароль.

Вот код:

Код: Выделить всё

<?php
namespace app\controllers;
use Yii;
use app\models\User;
use app\models\Rabota;
use app\models\Resume;
class CabinetController extends AppController
{
	public function actionIndex($id){
		if(Yii::$app->user->isGuest){
			Yii::$app->getResponse()->redirect('/site/login');
		}
		if(!Yii::$app->user->isGuest && Yii::$app->user->id == Yii::$app->request->get('id')) {
			$cab = User::findOne($id);
			if(empty($cab)){
				throw new \yii\web\HttpException(404, 'Такого пользователя нет.');
			}
			if (isset($_POST['login-formd'])) {
				if ($cab->load(Yii::$app->request->post()) && $cab->save()) {
					Yii::$app->session->setFlash('FormSubmittedC');
					return $this->refresh();
				}
			}
			$modelz = User::findOne($id);
			if (isset($_POST['login-formd_pass'])) {
				$modelz->password = \Yii::$app->security->generatePasswordHash($modelz->password);
				$modelz->save();
				if ($modelz->load(Yii::$app->request->post())) {
					Yii::$app->session->setFlash('FormSubmitted_pass');
					return $this->refresh();
				}
			}
			$works = Rabota::find()->where(['user_id' => $id])->all();
			$resumes = Resume::find()->where(['user_id' => $id])->all();
		}else{
			throw new \yii\web\HttpException(404, 'Страница не найдена');
		}
		$this->setMeta($cab->name .' | Aбхаз-работа.ру - сайт поиска работы №1 в Абхазии', $cab->name.' | Aбхаз-работа.ру - сайт поиска работы №1 в Абхазии', $cab->name.' | Aбхаз-работа.ру - сайт поиска работы №1 в Абхазии');
		return $this->render('index', compact('cab', 'modelz', 'works', 'resumes'));
	}
}
а именно этот код отвечает за смену:

Код: Выделить всё

$modelz = User::findOne($id);
			if (isset($_POST['login-formd_pass'])) {
				$modelz->password = \Yii::$app->security->generatePasswordHash($modelz->password);
				$modelz->save();
				if ($modelz->load(Yii::$app->request->post())) {
					Yii::$app->session->setFlash('FormSubmitted_pass');
					return $this->refresh();
				}
			}
Вид:

Код: Выделить всё

<?php $forms = ActiveForm::begin([
                            'id' => 'login-formd_pass',
                        ]); ?>

                        <?php echo $forms->field($modelz, 'password', [
                            'inputOptions' => ['class' => 'inp2']
                        ])->textInput()->input('password', ['placeholder' => 'Новый пароль:', 'value' => ''])->label(false); ?>

                        <?= Html::submitButton('Изменить', ['class' => 'bt_feed', 'name' => 'login-formd_pass', 'form' => 'login-formd_pass']) ?>

                        <?php ActiveForm::end(); ?>

Модель:

Код: Выделить всё

<?php
namespace app\models;
use yii\db\ActiveRecord;
class User extends ActiveRecord implements \yii\web\IdentityInterface
{
    public static function tableName(){
        return 'user';
    }
    public function rules()
    {
        return [
            [['username', 'password', 'name', 'surname', 'otchestvo', 'sity'], 'required'],
            [['name', 'surname', 'sity', 'date', 'phone', 'phone2', 'otchestvo'], 'string'],
            [['sex'], 'integer'],
            [['username'], 'email'],
            ['username', 'unique'],
        ];
    }
    public function attributeLabels()
    {
        return [
            'username' => 'E-mail',
            'password' => 'Пароль',
            'name' => 'Имя',
            'surname' => 'Фамилия',
            'otchestvo' => 'Отчество',
            'sity' => 'Город',
            'sex' => 'Пол',
            'date' => 'Дата рождения',
            'phone' => 'Телефон',
            'phone2' => 'Телефон',
        ];
    }
    public static function findIdentity($id)
    {
        return static::findOne($id);
    }
    public static function findIdentityByAccessToken($token, $type = null)
    {
    }
    public static function findByUsername($username)
    {
        return static::findOne(['username' => $username]);
    }
    public function getId()
    {
        return $this->id;
    }
    public function getAuthKey()
    {
        return $this->auth_key;
    }
    public function validateAuthKey($authKey)
    {
        return $this->auth_key === $authKey;
    }
    public function validatePassword($password)
    {
        return \Yii::$app->security->validatePassword($password, $this->password);
    }
    public function setPassword($password)
    {
        $this->password =  \Yii::$app->security->generatePasswordHash($password);
    }
    public function generateAuthKey(){
        $this->auth_key = \Yii::$app->security->generateRandomString();
    }
    public function create(){
        return $this->save(false);
    }
    public static function generate(){
        $chars="qazxswedcvfrtgbnhyujmkiolp1234567890QAZXSWEDCVFRTGBNHYUJMKIOLP";
        $max=10;
        $size=StrLen($chars)-1;
        $password=null;
        while($max--) {
            $password.=$chars[rand(0,$size)];
        }
        return $password;
    }
}
в чем ошибка?
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Не работает смена пароля.

Сообщение caHek2x »

и так читаем по строкам
генерируем хэш пароля
$modelz->password = \Yii::$app->security->generatePasswordHash($modelz->password);
сохраняем
$modelz->save();
загружаем данные пришедшие из формы
if ($modelz->load(Yii::$app->request->post()))

и так вопрос: что вы сохранили ?
Ответить