Php yii2哈希密码注册和登录

Php yii2哈希密码注册和登录,php,hash,yii2,passwords,Php,Hash,Yii2,Passwords,我无法使用此脚本成功登录 Loginform.php public function validatePassword($attribute, $params) { if (!$this->hasErrors()) { $user = $this->getUser(); if (!$user || $user->validatePassword($this->password)) { $this->a

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

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.');
        }

    }
}
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);

}
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;
}
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;
            }
        }
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]);
    }
}
<?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(); ?>
在我的模型中,我有这个

User.php

public function validatePassword($attribute, $params)
{
    if (!$this->hasErrors()) {
        $user = $this->getUser();

        if (!$user || $user->validatePassword($this->password)) {
            $this->addError($attribute, 'Incorrect name/password.');
        }

    }
}
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);

}
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;
}
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;
            }
        }
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]);
    }
}
<?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(); ?>
这是我的注册脚本

Signupform.php

public function validatePassword($attribute, $params)
{
    if (!$this->hasErrors()) {
        $user = $this->getUser();

        if (!$user || $user->validatePassword($this->password)) {
            $this->addError($attribute, 'Incorrect name/password.');
        }

    }
}
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);

}
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;
}
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;
            }
        }
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]);
    }
}
<?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(); ?>
有人能帮我吗?谢谢。

请遵循以下步骤:

Model User.php

public function validatePassword($attribute, $params)
{
    if (!$this->hasErrors()) {
        $user = $this->getUser();

        if (!$user || $user->validatePassword($this->password)) {
            $this->addError($attribute, 'Incorrect name/password.');
        }

    }
}
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);

}
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;
}
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;
            }
        }
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]);
    }
}
<?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(); ?>
iam在site controller中创建注册功能您可以根据需要创建模型

SiteController.php

public function validatePassword($attribute, $params)
{
    if (!$this->hasErrors()) {
        $user = $this->getUser();

        if (!$user || $user->validatePassword($this->password)) {
            $this->addError($attribute, 'Incorrect name/password.');
        }

    }
}
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);

}
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;
}
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;
            }
        }
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]);
    }
}
<?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(); ?>
这是我的视图文件register.php

public function validatePassword($attribute, $params)
{
    if (!$this->hasErrors()) {
        $user = $this->getUser();

        if (!$user || $user->validatePassword($this->password)) {
            $this->addError($attribute, 'Incorrect name/password.');
        }

    }
}
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);

}
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;
}
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;
            }
        }
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]);
    }
}
<?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(); ?>

注册
遵循以下步骤:

Model User.php

public function validatePassword($attribute, $params)
{
    if (!$this->hasErrors()) {
        $user = $this->getUser();

        if (!$user || $user->validatePassword($this->password)) {
            $this->addError($attribute, 'Incorrect name/password.');
        }

    }
}
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);

}
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;
}
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;
            }
        }
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]);
    }
}
<?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(); ?>
iam在site controller中创建注册功能您可以根据需要创建模型

SiteController.php

public function validatePassword($attribute, $params)
{
    if (!$this->hasErrors()) {
        $user = $this->getUser();

        if (!$user || $user->validatePassword($this->password)) {
            $this->addError($attribute, 'Incorrect name/password.');
        }

    }
}
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);

}
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;
}
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;
            }
        }
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]);
    }
}
<?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(); ?>
这是我的视图文件register.php

public function validatePassword($attribute, $params)
{
    if (!$this->hasErrors()) {
        $user = $this->getUser();

        if (!$user || $user->validatePassword($this->password)) {
            $this->addError($attribute, 'Incorrect name/password.');
        }

    }
}
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);

}
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;
}
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;
            }
        }
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]);
    }
}
<?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(); ?>

注册

从注册功能$user->setPassword($this->password)中删除此项;您已经在“用户模型除雾保存”功能中定义了它不工作,我的表中没有插入任何内容。。你能提供定制脚本吗?thanksit可能会打印一些验证错误($user->.getError());模具();你能查一下吗this@HasiburRahaman谢谢兄弟!!首先你说得对,我对密码进行了两次哈希运算。。我所做的是保留$user->setPassword($this->password);在注册函数中,删除了$this->password=$this->setPassword($this->password);在beforeSave()中;我最后更改的导致问题的是我的Loginform。如果(!$user | |$user->validatePassword($this->password)){$this->addError($attribute,'error name/password.');}之后出现错误,或者我忘记添加。。谢谢您可以检查am post的答案,这可能有助于您从注册功能$user->setPassword($this->password)中删除此选项;您已经在“用户模型除雾保存”功能中定义了它不工作,我的表中没有插入任何内容。。你能提供定制脚本吗?thanksit可能会打印一些验证错误($user->.getError());模具();你能查一下吗this@HasiburRahaman谢谢兄弟!!首先你说得对,我对密码进行了两次哈希运算。。我所做的是保留$user->setPassword($this->password);在注册函数中,删除了$this->password=$this->setPassword($this->password);在beforeSave()中;我最后更改的导致问题的是我的Loginform。如果(!$user | |$user->validatePassword($this->password)){$this->addError($attribute,'error name/password.');}之后出现错误,或者我忘记添加。。谢谢你可以查看我的帖子,它可能会帮助你