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

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

認證

認證

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

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

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

配置 yii\web\User

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

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

認證接口 yii\web\IdentityInterface 的實現

認證類 yii\web\User::identityClass 必須實現包含以下方法的 認證接口 yii\web\IdentityInterface:

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

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

下面的例子是一個通過結合了?user?數據表的 AR 模型?Active Record?實現的一個認證類 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;
    }
}

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

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?認證類和用戶組件 yii\web\User。前者是實現 認證邏輯的類,通常用關聯(lián)了 持久性存儲的用戶信息的AR模型?Active Record?實現。后者是負責管理用戶認證狀態(tài)的 應用組件。

使用用戶組件 yii\web\User

在?user?應用組件方面,你主要用到 yii\web\User 。

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

// 當前用戶的身份實例。未認證用戶則為 Null 。$identity = Yii::$app->user->identity;

// 當前用戶的ID。 未認證用戶則為 Null 。$id = Yii::$app->user->id;

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

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

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

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

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

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

注銷用戶:

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

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

認證事件

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

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