Yii2登录无法验证密码

时间:2018-10-06 11:59:18

标签: login yii2

正如标题所述,我在应用程序的这一方面有些麻烦。因此,基本上,在我的UserController中,我对密码进行哈希处理,并在登录页面中使用标准安全工具对其进行了验证。从表单到用户的所有内容都很好,但是检查无法返回true。我与beforeSave / beforeValidate中的密码没有任何交互。有什么想法吗?

UserController: 
public function actionRegister()
{
    $model = new User(['scenario' => 'register']);
    if ($model->load(Yii::$app->request->post()) && $model->validate()) {
        $model->password_usr = Yii::$app->security->generatePasswordHash($model->password_usr);
        if ($model->save()) {
            Yii::$app->session->setFlash('success', 'User created');
            return $this->redirect('/site/login');
        } else {
            die(print_r($model->getErrors()));
        }
    }
    return $this->render('register', [
        'model' => $model,
    ]);
}

SiteController:
public function actionLogin()
    {
        if (!Yii::$app->user->isGuest) {
            return $this->goHome();
        }
        $model = new LoginForm();
        if ($model->load(Yii::$app->request->post()) && $model->validate()) {
            $model->login();
            return $this->goBack();
        }
        $model->password = '';
        return $this->render('login', [
            'model' => $model,
        ]);
    }

User model:
public function validatePassword($password)
    {
        return Yii::$app->security->validatePassword($password, $this->password_usr);
    }

登录表单是yii2生成的默认表单

2 个答案:

答案 0 :(得分:0)

也许这是一个问题

die(print_r($model->getErrors())); 

登录

public function actionLogin()
{
    $this->layout = "login";

    if (!Yii::$app->user->isGuest) {
        return $this->goHome();
    }

    $model = new LoginForm();
    if ($model->load(Yii::$app->request->post()) && $model->login()) {
        return $this->goBack();
    } else {
        $model->password = '';
    }
    return $this->render('login', [
        'model' => $model,
    ]);
}

注册

public function actionSignup()
{
    $this->layout = "login";
    $model = new SignupForm();
    if ($model->load(Yii::$app->request->post())) {
        if ($user = $model->signup()) {
            if (Yii::$app->getUser()->login($user)) {
                return $this->goHome();
            }
        }
    }

    return $this->render('signup', [
        'model' => $model,
    ]);
}

答案 1 :(得分:0)

问题在于数据库中的密码字段,它是varchar(30),而generatePasswordHash返回了60个字符的字符串