亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄 搜尋
閱讀前篇 簡(jiǎn)介 Yii 是什么 從 Yii 1.1 升級(jí) 入門 安裝 Yii 運(yùn)行應(yīng)用 第一次問候 使用Forms 數(shù)據(jù)庫應(yīng)用 使用 Gii 生成代碼 進(jìn)階 應(yīng)用結(jié)構(gòu) 概述 入口腳本 應(yīng)用(Applications) 應(yīng)用組件(Application Components) 控制器(Controllers) 模型(Models) 視圖(views) 模塊(Modules) 過濾器(Filters) 小部件(Widgets) 前端資源(Assets) 擴(kuò)展(Extensions) 請(qǐng)求處理 運(yùn)行概述 啟動(dòng)引導(dǎo)(Bootstrapping) 路由和創(chuàng)建URL 請(qǐng)求(Requests) 響應(yīng)(Responses) Sessions 和 Cookies 錯(cuò)誤處理(Handling Errors) 日志(Logging) 關(guān)鍵概念 組件(Component) 屬性(Property) 事件(Events) 行為(Behaviors) 配置(Configurations) 別名(Aliases) 類自動(dòng)加載(Autoloading) 服務(wù)定位器(Service Locator) 依賴注入容器(Dependency Injection Container) 配合數(shù)據(jù)庫工作 數(shù)據(jù)庫訪問 (Data Access Objects) 查詢生成器(Query Builder) 活動(dòng)記錄(Active Record) 數(shù)據(jù)庫遷移(Migrations) Sphinx Redis MongoDB Elasticsearch 接收用戶數(shù)據(jù) 創(chuàng)建表單(Creating Forms) 輸入驗(yàn)證(Validating Input) 文件上傳(Uploading Files) 收集列表輸入(Collecting Tabular Input) 多模型的復(fù)合表單(Getting Data for Multiple Models) 顯示數(shù)據(jù) 格式化輸出數(shù)據(jù)(Data Formatting) 分頁(Pagination) 排序(Sorting) 數(shù)據(jù)提供器(Data Providers) 數(shù)據(jù)小部件(Data Widgets) 客戶端腳本使用(Working with Client Scripts) 主題(Theming) 安全 認(rèn)證(Authentication) 授權(quán)(Authorization) 處理密碼(Working with Passwords) 客戶端認(rèn)證(Auth Clients) 最佳安全實(shí)踐(Best Practices) 緩存 概述 數(shù)據(jù)緩存 片段緩存 頁面緩存 HTTP 緩存 RESTfull Web服務(wù) 快速入門(Quick Start) 資源(Resources) 控制器(Controllers) 路由(Routing) 格式化響應(yīng)(Response Formatting) 授權(quán)認(rèn)證(Authentication) 速率限制(Rate Limiting) 版本(Versioning) 錯(cuò)誤處理(Error Handling) 開發(fā)工具 調(diào)試工具欄和調(diào)試器 使用Gii生成代碼 生成API文檔 測(cè)試 概述(Overview) 配置測(cè)試環(huán)境(Testing environment setup) 單元測(cè)試(Unit Tests) 功能測(cè)試(Function Tests) 驗(yàn)收測(cè)試(Acceptance Tests) 測(cè)試夾具(Fixtures) 高級(jí)專題 高級(jí)應(yīng)用模板 創(chuàng)建自定義應(yīng)用程序結(jié)構(gòu) 控制臺(tái)命令 核心驗(yàn)證器(Core Validators) 國(guó)際化 收發(fā)郵件 性能優(yōu)化 共享主機(jī)環(huán)境 模板引擎 集成第三方代碼 小部件 Bootstrap 小部件 Jquery UI 助手類 概述 Array 助手(ArrayHelper) Html 助手(Html) Url 助手(Url)
文字

認(rèn)證

認(rèn)證

認(rèn)證是鑒定用戶身份的過程。它通常使用一個(gè)標(biāo)識(shí)符 (如用戶名或電子郵件地址)和一個(gè)加密令牌(比如密碼或者存取令牌)來 鑒別用戶身份。認(rèn)證是登錄功能的基礎(chǔ)。

Yii提供了一個(gè)認(rèn)證框架,它連接了不同的組件以支持登錄。欲使用這個(gè)框架, 你主要需要做以下工作:

  • 設(shè)置用戶組件 yii\web\User ;
  • 創(chuàng)建一個(gè)類實(shí)現(xiàn) yii\web\IdentityInterface 接口。

配置 yii\web\User

用戶組件 yii\web\User 用來管理用戶的認(rèn)證狀態(tài)。這需要你 指定一個(gè)含有實(shí)際認(rèn)證邏輯的認(rèn)證類 yii\web\User::identityClass。 在以下web應(yīng)用的配置項(xiàng)中,將用戶用戶組件 yii\web\User 的 認(rèn)證類 yii\web\User::identityClass 配置成 模型類?app\models\User, 它的實(shí)現(xiàn)將在下一節(jié)中講述。

return [
    'components' => [
        'user' => [
            'identityClass' => 'app\models\User',
        ],
    ],
];

認(rèn)證接口 yii\web\IdentityInterface 的實(shí)現(xiàn)

認(rèn)證類 yii\web\User::identityClass 必須實(shí)現(xiàn)包含以下方法的 認(rèn)證接口 yii\web\IdentityInterface:

  • yii\web\IdentityInterface::findIdentity():根據(jù)指定的用戶ID查找 認(rèn)證模型類的實(shí)例,當(dāng)你需要使用session來維持登錄狀態(tài)的時(shí)候會(huì)用到這個(gè)方法。
  • yii\web\IdentityInterface::findIdentityByAccessToken():根據(jù)指定的存取令牌查找 認(rèn)證模型類的實(shí)例,該方法用于 通過單個(gè)加密令牌認(rèn)證用戶的時(shí)候(比如無狀態(tài)的RESTful應(yīng)用)。
  • yii\web\IdentityInterface::getId():獲取該認(rèn)證實(shí)例表示的用戶的ID。
  • yii\web\IdentityInterface::getAuthKey():獲取基于 cookie 登錄時(shí)使用的認(rèn)證密鑰。 認(rèn)證密鑰儲(chǔ)存在 cookie 里并且將來會(huì)與服務(wù)端的版本進(jìn)行比較以確保 cookie的有效性。
  • yii\web\IdentityInterface::validateAuthKey() :是基于 cookie 登錄密鑰的 驗(yàn)證的邏輯的實(shí)現(xiàn)。

用不到的方法可以空著,例如,你的項(xiàng)目只是一個(gè) 無狀態(tài)的 RESTful 應(yīng)用,只需實(shí)現(xiàn) yii\web\IdentityInterface::findIdentityByAccessToken() 和 yii\web\IdentityInterface::getId() ,其他的方法的函數(shù)體留空即可。

下面的例子是一個(gè)通過結(jié)合了?user?數(shù)據(jù)表的 AR 模型?Active Record?實(shí)現(xiàn)的一個(gè)認(rèn)證類 yii\web\User::identityClass。

<?php

use yii\db\ActiveRecord;
use yii\web\IdentityInterface;

class User extends ActiveRecord implements IdentityInterface{
    public static function tableName()
    {
        return 'user';
    }

    
    public static function findIdentity($id)
    {
        return static::findOne($id);
    }

    
    public static function findIdentityByAccessToken($token, $type = null)
    {
        return static::findOne(['access_token' => $token]);
    }

    
    public function getId()
    {
        return $this->id;
    }

    
    public function getAuthKey()
    {
        return $this->auth_key;
    }

    
    public function validateAuthKey($authKey)
    {
        return $this->getAuthKey() === $authKey;
    }
}

如上所述,如果你的應(yīng)用利用 cookie 登錄, 你只需要實(shí)現(xiàn)?getAuthKey()?和?validateAuthKey()?方法。這樣的話,你可以使用下面的代碼在?user?表中生成和存儲(chǔ)每個(gè)用戶的認(rèn)證密鑰。

class User extends ActiveRecord implements IdentityInterface{
    ......
    
    public function beforeSave($insert)
    {
        if (parent::beforeSave($insert)) {
            if ($this->isNewRecord) {
                $this->auth_key = \Yii::$app->security->generateRandomString();
            }
            return true;
        }
        return false;
    }
}

注意:不要混淆?user?認(rèn)證類和用戶組件 yii\web\User。前者是實(shí)現(xiàn) 認(rèn)證邏輯的類,通常用關(guān)聯(lián)了 持久性存儲(chǔ)的用戶信息的AR模型?Active Record?實(shí)現(xiàn)。后者是負(fù)責(zé)管理用戶認(rèn)證狀態(tài)的 應(yīng)用組件。

使用用戶組件 yii\web\User

在?user?應(yīng)用組件方面,你主要用到 yii\web\User 。

你可以使用表達(dá)式?Yii::$app->user->identity?檢測(cè)當(dāng)前用戶身份。它返回 一個(gè)表示當(dāng)前登錄用戶的認(rèn)證類 yii\web\User::identityClass 的實(shí)例, 未認(rèn)證用戶(游客)則返回 null。下面的代碼展示了如何從 yii\web\User 獲取其他認(rèn)證相關(guān)信息:

// 當(dāng)前用戶的身份實(shí)例。未認(rèn)證用戶則為 Null 。$identity = Yii::$app->user->identity;

// 當(dāng)前用戶的ID。 未認(rèn)證用戶則為 Null 。$id = Yii::$app->user->id;

// 判斷當(dāng)前用戶是否是游客(未認(rèn)證的)$isGuest = Yii::$app->user->isGuest;

你可以使用下面的代碼登錄用戶:

// 使用指定用戶名獲取用戶身份實(shí)例。// 請(qǐng)注意,如果需要的話您可能要檢驗(yàn)密碼$identity = User::findOne(['username' => $username]);

// 登錄用戶
Yii::$app->user->login($identity);

yii\web\User::login() 方法將當(dāng)前用戶的身份登記到 yii\web\User。如果 session 設(shè)置為 yii\web\User::enableSession,則使用 session 記錄用戶身份,用戶的 認(rèn)證狀態(tài)將在整個(gè)會(huì)話中得以維持。如果開啟自動(dòng)登錄 yii\web\User::enableAutoLogin 則基于 cookie 登錄(如:記住登錄狀態(tài)),它將使用 cookie 保存用戶身份,這樣 只要 cookie 有效就可以恢復(fù)登錄狀態(tài)。

為了使用 cookie 登錄,你需要在應(yīng)用配置文件中將 yii\web\User::enableAutoLogin 設(shè)為 true。你還需要在 yii\web\User::login() 方法中 傳遞有效期(記住登錄狀態(tài)的時(shí)長(zhǎng))參數(shù)。

注銷用戶:

Yii::$app->user->logout();

請(qǐng)注意,啟用 session 時(shí)注銷用戶才有意義。該方法將從內(nèi)存和 session 中 同時(shí)清理用戶認(rèn)證狀態(tài)。默認(rèn)情況下,它還會(huì)注銷所有的 用戶會(huì)話數(shù)據(jù)。如果你希望保留這些會(huì)話數(shù)據(jù),可以換成?Yii::$app->user->logout(false)?。

認(rèn)證事件

yii\web\User 類在登錄和注銷流程引發(fā)一些事件。

  • yii\web\User::EVENT_BEFORE_LOGIN:在登錄 yii\web\User::login() 時(shí)引發(fā)。 如果事件句柄將事件對(duì)象的 yii\web\UserEvent::isValid 屬性設(shè)為 false, 登錄流程將會(huì)被取消。
  • yii\web\User::EVENT_AFTER_LOGIN:登錄成功后引發(fā)。
  • yii\web\User::EVENT_BEFORE_LOGOUT:注銷 yii\web\User::logout() 前引發(fā)。 如果事件句柄將事件對(duì)象的 yii\web\UserEvent::isValid 屬性設(shè)為 false, 注銷流程將會(huì)被取消。
  • yii\web\User::EVENT_AFTER_LOGOUT:成功注銷后引發(fā)。
你可以通過響應(yīng)這些事件來實(shí)現(xiàn)一些類似登錄統(tǒng)計(jì)、在線人數(shù)統(tǒng)計(jì)的功能。例如, 在登錄后 yii\web\User::EVENT_AFTER_LOGIN 的處理程序,你可以將用戶的登錄時(shí)間和IP記錄到?user?表中。
上一篇: 下一篇: