yii2項目實戰-用戶管理之user組件的配置

做者:白狼 出處:http://www.manks.top/document/yii2-user-config.html 本文版權歸做者,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。php

咱們在上一小節中藉助yii-adminlte-asset搭建了咱們的管理後臺,目前爲止,咱們也是僅僅使用了他的模版文件,關於他的一些特性咱們後面再作介紹。html

上一章節,爲了更好的演示adminlte模版界面的效果,咱們臨時屏蔽了backendcontrollersSiteController.php文件中behaviors的access項,先恢復過來,咱們刷新下首頁,默認的是site/index操做,直接跳轉到登陸界面了。access項的實質是一種【行爲】,其附加在當前控制層,限制了一些規則。好比說site/index這裏就設定了規則:必須是已登陸用戶才能夠訪問。關於行爲的細節以及ACF(AccessControl Filter)本文不作深究,後面到了該說的時候天然會作詳細的說明。有些同窗要說了,既然如此,去掉這個access好了,可是這個是必需要加的,由於你我都不想暴露咱們的後臺讓全部人均可以訪問吧。既然如此,咱們就須要登陸,就須要建立新的用戶!web

建立後臺用戶表
本小節,咱們來看看如何來使用yii2這個登陸註冊模塊,爲了更好的對其進行一個理解,咱們建立一個與yii自帶的用戶表作一個稍微不一樣的數據表。api

首先,咱們參考yii自帶的用戶表結構(自帶的用戶表參考consolemigrationsxxx_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認證類(該類是用於登陸等操做的認證)

打開backendconfigmain.php, 找到components user這裏,修改backendmodelsUserBackend類爲咱們的認證類

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

②、修改登陸操做中使用的認證類爲 backendmodelsUserBackend ,爲後面實現登陸提早作準備

打開commonmodelsLoginForm.php文件,找到getUser方法,這裏的User類使用的仍是commonmodelsUser類,咱們在文件頂部引入第一步中配置的identityClass目標類

use backend\models\UserBackend as User;

③、雖然咱們配置了認證類爲UserBackend,可是咱們還須要爲該類增長認證方法呀等操做。接着咱們就針對認證類進行實現。

先打開咱們配置的identityClass的目標文件backendmodelsUserBackend.php, 該類至少須要實現接口 yiiwebIdentityInterface 幾個抽象方法才能夠哦。
包括下面的 根據用戶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;
    }
}

到這裏呢,咱們已經成功的指定了backendmodelsUserBackend類爲咱們管理後臺用戶管理的類了!

鑑於學習的積極性,咱們一次不說那麼多,這裏咱們已經成功配置好了user組件,其實到這裏關於登陸咱們也基本上在不知不覺中作的差很少了。下一節咱們會實現掉利用user_backend表以及咱們剛剛配置成功的用戶組件實現後臺管理用戶的添加和登陸機制,敬請期待!

查看原文

相關文章
相關標籤/搜索