yii2项目实战-用户管理之user组件的配置

做者:白狼 出处:http://www.manks.top/document/yii2-user-config.html 本文版权归做者,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接,不然保留追究法律责任的权利。php

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

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

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

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

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自带的登陆注册模块,不信你看完就知道我有没有说谎了。yii2

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

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

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

也就是说咱们如今应该可以直接访问 /index.php?r=user-backend 看到后台用户的管理列表了!可是这里仅仅是第一步操做!ide

配置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

<?php

namespace backend\models;

use Yii;
use yii\web\IdentityInterface;

/**
 * This is the model class for table "user_backend".
 *
 * @property integer $id
 * @property string $username
 * @property string $auth_key
 * @property string $password_hash
 * @property string $email
 * @property string $created_at
 * @property string $updated_at
 */
class UserBackend extends \yii\db\ActiveRecord implements IdentityInterface
{
    
    // 其余gii生成的代码,由于咱们并未对其进行过改动,所以这里省略,下面只补充咱们实现的几个抽象方法    

    /**
     * @inheritdoc
     * 根据user_backend表的主键(id)获取用户
     */
    public static function findIdentity($id)
    {
        return static::findOne(['id' => $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表以及咱们刚刚配置成功的用户组件实现后台管理用户的添加和登陆机制,敬请期待!

查看原文

相关文章
相关标签/搜索