yii IUserIdentity驗證類的使用

2021-06-22 11:11:33 字數 2595 閱讀 6115

驗證和授權在頁面需要限制訪問時用到。驗證就是確認某人就是他所聲稱的那個人。通常涉及到使用者名稱和密碼,但也包含其他方式,例如智慧卡,指紋等。授權是在驗證使用者後,查明他是否被允許管理指定的資源。通常判斷他是否是有權訪問資源的角色的成員。

yii 有乙個內建的驗證/授權框架,它易於使用且可定製。

使用使用者元件,可以使用 cwebuser::isguest 檢查乙個使用者是否已經登入;我們可以登入或者登出乙個使用者; 呼叫 cwebuser::checkaccess 可以檢查使用者是否可以執行特定的操作; 也可以得到使用者的唯一身份和另外的持久身份資訊。

如之前所說, 驗證是確認使用者的身份。典型的網路應用驗證通常是使用使用者名稱和密碼的組合來確認使用者的身份。然而,也可以包含其他的方法。為了掩飾相容各種驗證方法, yii 認證框架引入了身份類。

我們定義乙個身份類,它含有實際的驗證邏輯。身份類應當實現 iuseridentity 介面。不同的身份類可以實現不同的驗證方法 (例如 openid, ldap, twitter oauth, facebook connect). 推薦擴充套件 cuseridentity 編寫你自己的類,cuseridentity 是使用使用者名稱和密碼這種驗證方法的基類。

定義身份類最主要的工作是實現 [iuseridentity::authenticate] 方法. 這個方法封裝了驗證的邏輯細節。在身份類中也可以宣告額外的身份資訊。

例子在下面的例子中,我們使用乙個身份類來演示使用資料庫方法來驗證。這是非常典型的方法。使用者需要輸入使用者名稱和密碼到登入表單中,然後我們驗證這些賬號資訊,使用 activerecord ,向資料庫中的表來查詢。我們需要演示的是

<?php

class 

useridentity 

extends 

cuseridentity

return !

$this

->

errorcode;}

public function 

getid()}

?>

資訊: cwebuser 預設使用 session 作為使用者身份資訊的持久儲存方式。若啟用了基於 cookie 的登入 (通過設定 cwebuser::allowautologin 為 true), 使用者身份也可以被儲存在 cookie 中。一定不要宣告敏感資訊 (例如密碼) 為 persistent.

現在已經看到了建立乙個使用者身份的例子,我們使用它來簡化登入和登出動作。如下**展示了它們如何被實現的:

<?php

// login a user with the provided username and password.

$identity

=new 

useridentity

($username

,$password

);if(

$identity

->

authenticate

())yii

::()->

user

->

login

($identity

);else

echo 

$identity

->

errormessage

;......

// logout the current user

yii::

()->

user

->

logout

();?>

這裡我們建立了乙個 useridentity 物件並傳遞賬號資訊 (也就是使用者提交的 $username 和 $password ) 到它的構造器中. 然後我們只需呼叫 authenticate() 方法. 若成功,傳遞身份資訊到 cwebuser::login 方法,在此方法中身份資訊被儲存到持久儲存 (預設是 php session ) . 若驗證失敗, 我們可以查詢 errormessage 屬性來了解為何失敗.

預設情況下, 使用者在一段閒置期限後將被登出, 取決於 session 配額. 為了改變這個行為, 我們可以設定 user 元件的 allowautologin 屬性為 true 並傳遞 duration 引數到 cwebuser::login 方法中. 在指定的期限內使用者仍然處於登入狀態,即使他關閉了瀏覽器視窗 注意此特徵需要使用者的瀏覽器接受 cookie.

<?php

// keep the user logged in for 7 days.

// make sure allowautologin is set true for the user component.

yii::

()->

user

->

login

($identity

,3600*24

*7);?>

雖然 yii 有方法來防止狀態 cookie 在客戶端被篡改, 我們強烈建議安全敏感資訊不要儲存為狀態. 而是選擇儲存在伺服器端,從伺服器端的持久儲存中讀取 (例如資料庫).

此外, 位於要求較高的網路應用,我們建議使用如下策略來增強基於 cookie 登入的安全性:

通過使用上面的策略, 我們消除了這種可能性:乙個使用者可以重新使用舊的包含過期 state 資訊的 state cookie。

為了實現上面的策略, 我們需要重寫如下兩個方法:

elementUI form表單驗證規則使用詳解

elementui提供了form表單自帶有表單驗證規則,這裡簡單介紹下 比較簡單的表單驗證可以直接使用form自帶的,ele定義的驗證規則為rules陣列,在使用elementu表單驗證時可以向其傳入約定的驗證規則陣列,並將 form item 的prop屬性設定為需校驗的欄位名即可 立即建立 重置...

非空格式驗證框架Validation的使用

2015 九月16 原分類 android 358 0 validation簡介 validation的特點 基本用法 先建立個表單form類用來裝控制項 然後建立validate類,將被驗證 如 edittext 控制項傳入 將這個validate類addvalidator加入 如 非空型別not...

easyui validatebox 驗證型別

required 必選字段 remote 請修正該欄位 email 請輸入正確格式的電子郵件 url 請輸入合法的 date 請輸入合法的日期 dateiso 請輸入合法的日期 iso number 請輸入合法的數字 digits 只能輸入整數 creditcard 請輸入合法的信用卡號 equal...