【问题标题】:Yii2 basic validate passwordYii2 基本验证密码
【发布时间】:2017-12-25 06:29:22
【问题描述】:

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

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
}

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

【问题讨论】:

    标签: yii2 yii2-basic-app


    【解决方案1】:

    创建新动作,将其命名为登录 确保从 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
        }
    
        }
    

    【讨论】:

      【解决方案2】:

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

      在创建动作中

      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 作为用户模型,但如果有人使用 User 模型,它就在用户模型中

      【讨论】:

        【解决方案3】:

        恕我直言,代码:

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

        可用于用户登录时的 POST 方法,在“// all good, logging user in”中,您将使用 Web Session 执行某些操作,为指定用户保存会话,然后是的,用户已登录,

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

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

        【讨论】:

        • 我还不明白
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-23
        • 2019-07-22
        • 2016-11-17
        • 2021-06-29
        • 1970-01-01
        • 1970-01-01
        • 2017-09-18
        相关资源
        最近更新 更多