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

directory search
閱讀前篇 簡介 Yii 是什么 從 Yii 1.1 升級 入門 安裝 Yii 運行應(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) 擴展(Extensions) 請求處理 運行概述 啟動引導(dǎo)(Bootstrapping) 路由和創(chuàng)建URL 請求(Requests) 響應(yīng)(Responses) Sessions 和 Cookies 錯誤處理(Handling Errors) 日志(Logging) 關(guān)鍵概念 組件(Component) 屬性(Property) 事件(Events) 行為(Behaviors) 配置(Configurations) 別名(Aliases) 類自動加載(Autoloading) 服務(wù)定位器(Service Locator) 依賴注入容器(Dependency Injection Container) 配合數(shù)據(jù)庫工作 數(shù)據(jù)庫訪問 (Data Access Objects) 查詢生成器(Query Builder) 活動記錄(Active Record) 數(shù)據(jù)庫遷移(Migrations) Sphinx Redis MongoDB Elasticsearch 接收用戶數(shù)據(jù) 創(chuàng)建表單(Creating Forms) 輸入驗證(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) 最佳安全實踐(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) 錯誤處理(Error Handling) 開發(fā)工具 調(diào)試工具欄和調(diào)試器 使用Gii生成代碼 生成API文檔 測試 概述(Overview) 配置測試環(huán)境(Testing environment setup) 單元測試(Unit Tests) 功能測試(Function Tests) 驗收測試(Acceptance Tests) 測試夾具(Fixtures) 高級專題 高級應(yīng)用模板 創(chuàng)建自定義應(yīng)用程序結(jié)構(gòu) 控制臺命令 核心驗證器(Core Validators) 國際化 收發(fā)郵件 性能優(yōu)化 共享主機環(huán)境 模板引擎 集成第三方代碼 小部件 Bootstrap 小部件 Jquery UI 助手類 概述 Array 助手(ArrayHelper) Html 助手(Html) Url 助手(Url)
characters

認(rèn)證

認(rèn)證

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

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

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

配置 yii\web\User

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

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

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

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

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

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

下面的例子是一個通過結(jié)合了?user?數(shù)據(jù)表的 AR 模型?Active Record?實現(xiàn)的一個認(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 登錄, 你只需要實現(xiàn)?getAuthKey()?和?validateAuthKey()?方法。這樣的話,你可以使用下面的代碼在?user?表中生成和存儲每個用戶的認(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。前者是實現(xiàn) 認(rèn)證邏輯的類,通常用關(guān)聯(lián)了 持久性存儲的用戶信息的AR模型?Active Record?實現(xiàn)。后者是負(fù)責(zé)管理用戶認(rèn)證狀態(tài)的 應(yīng)用組件。

使用用戶組件 yii\web\User

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

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

// 當(dāng)前用戶的身份實例。未認(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;

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

// 使用指定用戶名獲取用戶身份實例。// 請注意,如果需要的話您可能要檢驗密碼$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)將在整個會話中得以維持。如果開啟自動登錄 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ù)。

注銷用戶:

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

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

認(rèn)證事件

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

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