博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
yii2项目实战-用户管理之user组件的配置
阅读量:7058 次
发布时间:2019-06-28

本文共 3525 字,大约阅读时间需要 11 分钟。

  hot3.png

作者:白狼 出处: 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

我们在中借助yii-adminlte-asset搭建了我们的管理后台,目前为止,我们也是仅仅使用了他的模版文件,关于他的一些特性我们后面再做介绍。

上一章节,为了更好的演示adminlte模版界面的效果,我们临时屏蔽了backend\controllers\SiteController.php文件中behaviors的access项,先恢复过来,我们刷新下首页,默认的是site/index操作,直接跳转到登录界面了。access项的实质是一种【行为】,其附加在当前控制层,限制了一些规则。比如说site/index这里就设定了规则:必须是已登录用户才可以访问。关于行为的细节以及ACF(AccessControl Filter)本文不做深究,后面到了该说的时候自然会做详细的说明。有些同学要说了,既然如此,去掉这个access好了,但是这个是必须要加的,因为你我都不想暴露我们的后台让所有人都可以访问吧。既然如此,我们就需要登录,就需要创建新的用户!

创建后台用户表 本小节,我们来看看如何来使用yii2这个登录注册模块,为了更好的对其进行一个理解,我们创建一个与yii自带的用户表做一个稍微不同的数据表。

首先,我们参考yii自带的用户表结构(自带的用户表参考console\migrations\xxx_init.php文件)创建如下数据表

CREATE TABLE `user_backend` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `username` varchar(255) COLLATE utf8_unicode_ci NOT NULL,  `auth_key` varchar(32) COLLATE utf8_unicode_ci NOT NULL,  `password_hash` varchar(255) COLLATE utf8_unicode_ci NOT NULL,  `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,  `created_at` datetime NOT NULL,  `updated_at` datetime NOT NULL,  PRIMARY KEY (`id`),  UNIQUE KEY `username` (`username`),  UNIQUE KEY `email` (`email`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

我们修改了表名,删减了password_reset_token字段以及修改了created_at和updated_at字段,有同学要疑问了,自带的不好吗,为嘛非要删减点呢?是要显示你的高超还是要咋滴?其实真没这个意思,我们这里仅仅是为了教大家如何更好的更易于理解的去使用yii2自带的登录注册模块,不信你看完就知道我有没有说谎了。

接下来我们通过 /index.php?r=gii 访问gii模块生成相关的model和curd,在【入门指南】中,我们有针对gii的使用做过讲解,这里就一带而过好了。

到这里你的项目应该多了下面几个文件

backend\models\UserBackend.phpbackend\models\UserBackendSearch.phpbackend\controllers\UserBackendController.phpbackend\views\user-backend\增删改查等页面

也就是说我们现在应该能够直接访问 /index.php?r=user-backend 看到后台用户的管理列表了!但是这里仅仅是第一步操作!

配置yii2的user模块 万事开头难,迈出了第一步,后面就相对而言简单了,但是还不足以让你掉以轻心!

为了让我们的数据表user-backend支持管理后台的登录注册功能,我们需要对其做一个简单的配置,包括下面这几个操作步骤!

①、配置下identityClass认证类(该类是用于登录等操作的认证)

打开backend\config\main.php, 找到components user这里,修改backend\models\UserBackend类为我们的认证类

'components' => [    'user' => [        'identityClass' => 'backend\models\UserBackend',        'enableAutoLogin' => true,    ],],

②、修改登录操作中使用的认证类为 backend\models\UserBackend ,为后面实现登录提前做准备

打开common\models\LoginForm.php文件,找到getUser方法,这里的User类使用的还是common\models\User类,我们在文件顶部引入第一步中配置的identityClass目标类

use backend\models\UserBackend as User;

③、虽然我们配置了认证类为UserBackend,但是我们还需要为该类增加认证方法呀等操作。接着我们就针对认证类进行实现。

先打开我们配置的identityClass的目标文件backend\models\UserBackend.php, 该类至少需要实现接口 yii\web\IdentityInterface 几个抽象方法才可以哦。 包括下面的 根据用户id获取用户身份的方法findIdentity、根据access_token获取用户身份的方法findIdentityByAccessToken、获取用户身份关联数据表的主键getId、获取auth_key的方法getAuthKey以及验证auth_key的方法validateAuthKey

$id]); } /** * @inheritdoc * 根据access_token获取用户,我们暂时先不实现,我们在文章 http://www.manks.top/yii2-restful-api.html 有过实现,如果你感兴趣的话可以看看 */ public static function findIdentityByAccessToken($token, $type = null) { throw new NotSupportedException('"findIdentityByAccessToken" is not implemented.'); } /** * @inheritdoc * 用以标识 Yii::$app->user->id 的返回值 */ public function getId() { return $this->getPrimaryKey(); } /** * @inheritdoc * 获取auth_key */ public function getAuthKey() { return $this->auth_key; } /** * @inheritdoc * 验证auth_key */ public function validateAuthKey($authKey) { return $this->getAuthKey() === $authKey; }}

到这里呢,我们已经成功的指定了backend\models\UserBackend类为我们管理后台用户管理的类了!

鉴于学习的积极性,我们一次不说那么多,这里我们已经成功配置好了user组件,其实到这里关于登录我们也基本上在不知不觉中做的差不多了。下一节我们会实现掉利用user_backend表以及我们刚刚配置成功的用户组件实现后台管理用户的添加和登录机制,敬请期待!

转载于:https://my.oschina.net/manks/blog/736037

你可能感兴趣的文章
debian 6.0 squeeze 上的 xen 网桥问题
查看>>
Java中Runnable和Thread区别
查看>>
程序员们是否能用自己熟悉的计算机语言来写诗呢??
查看>>
深入浅出,http过程
查看>>
Spring高级事务管理难点剖析
查看>>
mac Zip 常用命令
查看>>
zookeeper+kafka集群搭建
查看>>
python Flask 安装
查看>>
米利型和摩尔型状态机
查看>>
初伏天,热出 5 种 DevOps 事件管理工具
查看>>
第十一天内容《基础交换十一》
查看>>
android错误收集----Version found are
查看>>
java JPA之EntityManager
查看>>
Apache的Mesos和Google的Kubernetes 有什么区别?
查看>>
微服务实践
查看>>
Felix的几个初步文档
查看>>
1.1版本与1。01版本区别
查看>>
How to disable directory listing for Jetty's We...
查看>>
java生成图片缩略图
查看>>
JAVA中常见对象概念
查看>>