Yii2哈希密码注册和登录


yii2 hashing password register and signing in

使用此脚本无法成功登录。

Loginform.php

public function validatePassword($attribute, $params)
{
    if (!$this->hasErrors()) {
        $user = $this->getUser();
        if (!$user || $user->validatePassword($this->password)) {
            $this->addError($attribute, 'Incorrect name/password.');
        }
    }
}

在我的模型中我有这个

User.php

public function beforeSave($insert) {
    if (parent::beforeSave($insert)) {
        if ($this->isNewRecord) {
            $this->password = $this->setPassword($this->password);
        }
        return true;
    }
    return false;
}
public function validatePassword($password) {
    return Yii::$app->getSecurity()->validatePassword($password, $this->password);
}
public function setPassword($password) {
    return $this->password = Yii::$app->security->generatePasswordHash($password);
}

这是我的注册脚本

Signupform.php

public function signup() {
    if($this->validate()) {
        $user = new User();
        $user->username = $this->username;
        $user->email = $this->email;
        $user->setPassword($this->password);
        $user->save(); 
        return $user;
    }
    return null;
}
有谁能帮我一下吗?谢谢。

Follow This:

模型User.php

public $c_password;  //Define a variable for confirm password
//This is rule
public function rules() {
    return [
        [['fname', 'lname', 'username', 'password',], 'required'],
        [['fname', 'lname', 'authKey', 'accessToken'], 'string', 'max' => 100],
        [['authKey', 'accessToken'], 'safe'],
        [['username'], 'unique'],
        ['c_password', 'required'],
        ['c_password', 'compare', 'compareAttribute' => 'password', 'message' => "Passwords don't match"],
    ];
}

public function beforeSave($insert) {
            if (parent::beforeSave($insert)) {
                $this->password = Yii::$app->security->generatePasswordHash($this->password);
                return true;
            } else {
                return false;
            }
        }

我在站点控制器中创建一个注册函数,您可以根据需要创建一个模型

SiteController.php

public function actionRegister() {
    $model = new 'app'models'Users;   
    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        Yii::$app->session->setFlash('register', 'Registration Successful');
        return $this->redirect(['login']);
    } else {
        return $this->render('register', ['model' => $model]);
    }
}

这是我的视图文件register。php

<?php
    $form = ActiveForm::begin([
   'id' => 'login-form',
     'options' => ['class' => 'form-horizontal'],
       'fieldConfig' => [
       'template' => "{input}'n{error}",
       'options' => [
        'tag' => false,
         ],
           ],
     ]);
?>           
<?= $form->field($model, 'username')->textInput(['autofocus' => true]) ?>
<?= $form->field($model, 'password')->passwordInput([]) ?>
<?= $form->field($model, 'c_password')->passwordInput([]) ?>
 <button type="submit">Sign up</button>
 <?php ActiveForm::end(); ?>