Yii 2 登入使用者校驗

2021-09-22 00:06:26 字數 1640 閱讀 3479

在登入頁面,輸入使用者名稱密碼後,yii2是如何完成使用者名稱和密碼的校驗的?

根據yii的規則,使用者校驗的入口是從action開始的:

sitecontroller->actionlogin()

loginform->login()

loginform->validate()

loginform->validatepassword()

user->validatepassword()

上面的**流程把框架內的處理給隱藏起來了,從業務上來說,就是按照上述流程處理的,最終是在user->validatepassword()函式中完成密碼的校驗。

在上述**流程中,有兩個model:

這個是登入頁面的model,按照yii的思路,在這個model中主要是完成輸入引數的檢查,譬如是否輸入了使用者名稱、密碼,記住密碼的資料型別是否為布林型別等,這個model沒有跟乙個實際的表關聯起來。

這個是跟user表對應的model,用來實際完成使用者名稱和密碼的校驗。

以後如果想實現自己的登入操作,可對上面兩個model進行擴充套件,不過loginform沒什麼好擴充套件的,因為輸入引數也還就是那麼些,user倒是可以擴充套件,主要是使用自己的使用者名稱、密碼的校驗演算法。

在loginform中對引數進行檢查,是通過scenario來進行的,這個詞被翻譯為「場景」,為什麼需要場景呢?

模型可能在多個場景下使用,例如 user 模組可能會在收集使用者登入輸入,也可能會在使用者註冊時使用。在不同的場景下,模型可能會使用不同的業務規則和邏輯,例如 email 屬性在註冊時強制要求有,但在登陸時不需要。

所以,簡單的說,就是為不同的使用情況配置不同的檢查範圍。因此,在這一點上來說,場景跟控制器中的過濾器有類似的作用。

場景和屬性校驗規則的關係。

model中可以為屬性設定校驗規則,然後可以設定這些屬性的校驗值在哪些場景下起作用。預設是在全部場景下起作用。

參考文件:

1、2、

對輸入資料的校驗規則多種多樣,但是每個校驗規則都可能被不同的model屬性所使用,譬如要求判斷某個屬性必須輸入等,因此現在通用的方法是為每一種規則寫乙個校驗器,然後為model的屬性配置要使用哪乙個校驗器,這樣就實現了校驗器的復用。

在yii中有兩種校驗器,乙個是內建校驗器,乙個是inline校驗器,內建校驗器就是yii已經寫好了一些常用的校驗器,我們直接使用即可,而內建校驗器在某些時候並不能滿足需要,而且有些校驗處理也並不會被復用,因此這時可以使用inline校驗器。

使用inline校驗器,只要在配置時,指定乙個本model的函式作為校驗器函式,以loginform的密碼屬性為例:

public functionrules

()public functionvalidatepassword

($attribute

, $params)}

} 在rules()函式裡配置了password的校驗器為validatepassword,但是內建校驗器中是沒有這個的,於是在model->load()函式中,載入屬性資料並為屬性建立校驗器時,檢查到本model具有validatepassword介面,則就為password屬性建立乙個inline校驗器,執行本model的validatepassword介面完成校驗。

yii2登入筆記

yii2高階模板中自帶了登入註冊功能,這裡先記下登入功能的實現筆記 建立一張使用者user表,裡面需要根據user 的model檔案進行更改一些欄位名和新增,password hash是指用yii2進行雜湊加密後的密碼串。auth key使用使用者註冊時加的唯一標示,可以用來在瀏覽器記住使用者登入有...

yii2實戰之使用者註冊登入

繼控制器與檢視互動,本篇將講解如何自定義全域性函式,以及使用yii自帶的使用者註冊登入功能 有時候我們希望自定義一些函式,可以在全域性中呼叫,如php預設的var dump在頁面上的顯示效果並不好,尤其是多層級陣列的情況下,一大坨資料很難分辨。對此,yii提供了vardumper助手,可以輸出美觀易...

Yii2使用者認證

認證是鑑定使用者身份的過程,是登入功能的基礎。使用yii2提供的認證功能必須設定使用者元件user並建立乙個類實現yii web identityinte ce介面。1.在配置檔案中設定user元件。enableautologin 是否能基於cookie自動登入 idparam 儲存user元件唯一...