用户表结构如下,当然可以根据自已的需要添加或删除:
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, ], ];
然后我们创建一个登陆页面
表单提交
然后是处理用户登陆的,表单模型,在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框架中使用分页组件