Yii2基本验证密码

时间:2017-12-25 06:29:22

标签: yii2 yii2-basic-app

在我的用户控制器上我创建使用它像注册,我创建

public function actionCreate()
    {
        $model = new Userlogin();
        $model->password = null;

        if ($model->load(Yii::$app->request->post()) ) {

            $model->password = Yii::$app->getSecurity()->generatePasswordHash($model->password);                

            $model->save();
            return $this->redirect(['view', 'id' => $model->uid]);
        } else {
            return $this->render('create', [
                'model' => $model,
            ]);
        }
    }

它的工作,它密码密码,但我不知道如何验证密码并使其在登录时工作我读过我必须使用这个

if (Yii::$app->getSecurity()->validatePassword($password, $hash)) {
    // all good, logging user in
} else {
    // wrong password
}

但我不知道如何使用它或我必须使用它

3 个答案:

答案 0 :(得分:2)

创建新操作,将其命名为login 一定要从db

获取用户哈希密码
public function actionLogin() {


    $hash = User::find()->where('username='.$_POST['username'])->One();

    if (Yii::$app->getSecurity()->validatePassword($_POST['password'], $hash->password_hash)) {
        // all good, logging user in
    } else {
        // wrong password
    }

    }

答案 1 :(得分:1)

如果他处于相同的情况,我找到了解决方案

in create action

public function actionCreate()
    {
        $model = new Userlogin();

        if ($model->load(Yii::$app->request->post()) ) {

            $model->password = Yii::$app->security->generatePasswordHash($model->password);

            $model->save();
            return $this->redirect(['view', 'id' => $model->uid]);
        } else {
            return $this->render('create', [
                'model' => $model,
            ]);
        }
    }

并在用户模型更改

/**
     * Validates password
     *
     * @param string $password password to validate
     * @return bool if password provided is valid for current user
     */
    public function validatePassword($password)
    {
        return $this->password === $password;
    }

/**
     * Validates password
     *
     * @param string $password password to validate
     * @return bool if password provided is valid for current user
     */
    public function validatePassword($password)
    {
        return Yii::$app->getSecurity()->validatePassword($password, $this->password);
    }

此解决方案来自:https://stackoverflow.com/a/29508651/6562828

我正在使用Userlogin作为用户的模型,但如果有人使用用户模型,那么它就是用户模型

答案 2 :(得分:0)

恕我直言,代码:

 errorPlacement: function(error, element) {
        error.hide();
        $('.messagebox').hide();
        $('#alert-message').empty() 
        error.appendTo($('#alert-message'));
        $('.messagebox').slideDown('slow');
当用户登录时,

可以用于POST方法,并且在" //所有好的,记录用户在"中,您将对Web Session执行某些操作,为指定用户保存会话,然后是yay,user登录,

之后,您可以使用Session进行检查,"用户是否已登录?"等,

这里有一些关于Yii会话处理的好链接:http://www.yiiframework.com/doc-2.0/guide-runtime-sessions-cookies.html