怎么在YII2框架中自定义用户认证模型-创新互联

今天就跟大家聊聊有关怎么在YII2框架中自定义用户认证模型,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

创新互联建站长期为上千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为弋江企业提供专业的网站制作、网站建设弋江网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。

用户表结构如下,当然可以根据自已的需要添加或删除:


CREATE TABLE `tb_user` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID',
 `name` varchar(32) DEFAULT '' COMMENT '用户名',
 `pwd` varchar(64) DEFAULT '' COMMENT '密码',
 `head_img` varchar(256) DEFAULT '' COMMENT '图像',
 `sex` tinyint(1) DEFAULT '0' COMMENT '性别(0:男,1:女)',
 `age` tinyint(3) DEFAULT '0' COMMENT '年龄',
 `auth_key` varchar(32) DEFAULT '' COMMENT '认证密钥',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

然后我们在models下创建MyUser.php,代码如下:

 $token]);
  }

  //通过用户名,返回用户实例
  public static function findByUsername($name)
  {
    return static::findOne(['name' => $name]);
  }

  //获取用户ID
  public function getId()
  {
    return $this->id;
  }

  //获取用户认证密钥
  public function getAuthKey()
  {
    return $this->auth_key;
  }

  //生成cookie中的authkey
  public function generateAuthKey()
  {
    $this->auth_key = Yii::$app->security->generateRandomString(32);
    $this->save(false);
  }

  //验证用户认证密钥
  public function validateAuthKey($authKey)
  {
    return $this->getAuthKey() === $authKey;
  }

  //验证密码是否正确,当然我们也可以自已定义加密解密方式
  public function validatePassword($password)
  {
    return Yii::$app->security->validatePassword($password, $this->pwd);
  }
}

创建完我们自已的用户模型类后,我们需要在配置文件中修改成我们自已的,在config\web.php

'components' => [
	// ...
	'user' => [
		'identityClass' => 'app\models\MyUser',
		'enableAutoLogin' => true,
	],
];

然后我们创建一个登陆页面





  
  表单提交


" method="post">
  姓名:
  密码:
     request->csrfToken; ?>">

然后是处理用户登陆的,表单模型,在models下创建MyUserLogin.php

hasErrors()) {
      $user = $this->getUser();

      if (!$user || !$user->validatePassword($this->pwd)) {
        $this->addError($attribute, '密码错误');
      }
    }
  }

  //登陆处理
  public function login()
  {
    if ($this->validate()) {
      $user = $this->getUser();
      //监听事件,登陆前,重新生成authkey
      YII::$app->user->on(\yii\web\User::EVENT_BEFORE_LOGIN, [$user, 'generateAuthKey']);

      return Yii::$app->user->login($user, 3600 * 24);
    }
    return false;
  }

  //获取用户
  public function getUser()
  {
    return MyUser::findByUsername($this->name);
  }
}

最后就是我们的控制器代码

user->id);
    //当前用户是否是游客
    var_dump(YII::$app->user->isGuest);
  }

  public function actionLogin()
  {
    if (YII::$app->request->isPost) {

      $model = new MyUserLogin();
      $model->load(YII::$app->request->post(), '');

      if ($model->login()) {
        echo '登陆成功';
      } else {
        echo '登陆失败';
      }

    } else {
      return $this->renderPartial('login');
    }
  }
}

演示如下:

怎么在YII2框架中自定义用户认证模型

怎么在YII2框架中自定义用户认证模型

看完上述内容,你们对怎么在YII2框架中自定义用户认证模型有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。


分享名称:怎么在YII2框架中自定义用户认证模型-创新互联
文章网址:http://scyanting.com/article/cedgse.html