在yii中新增乙個使用者驗證

2021-08-24 19:26:53 字數 2853 閱讀 4578

1.為什麼要新增乙個使用者驗證:

因為我要將**後台和前台做在同乙個yii的應用中.但是前台也包含有會員的管理中心.而這兩個使用者驗證是完全不同的,所以需要兩個不同登陸頁面,要將使用者資訊儲存在不同的cookie或session中.所以需要在乙個應用中增加乙個使用者驗證

2.yii的使用者驗證:

在自定義使用者驗證前,我們首先要弄清楚yii的驗證和授權方式.

為了驗證乙個使用者,我們需要定義乙個有驗證邏輯的驗證類.在yii中這個類需要實現iuseridentity介面,不同的類就可以實現不同的驗證方法.**登陸一般需要驗證的就是使用者名稱和密碼,yii提供了cuseridentity類,這個類一般用於驗證使用者名稱和密碼的類.繼承後我們需要重寫其中的authenticate()方法來實現我們自己的驗證方法.具體**如下:

class useridentity extends cuseridentity

return !$this->errorcode;

}public function getid()

}

在使用者登陸時則呼叫如下**:

// 使用提供的使用者名稱和密碼登入使用者

$identity=new useridentity($username,$password);

if($identity->authenticate())

else

echo $identity->errormessage;

使用者退出時,則呼叫如下**:

// 登出當前使用者
其中的user是yii的乙個components.需要在protected/config/main.php中定義

'user'=>array(

// enable cookie-based authentication

'allowautologin'=>true,

'loginurl' => array('site/login'),

),

這裡我們沒有指定user的類名.因為在yii中預設user為cwebuser類的例項.

我們現在已經實現了使用者的登陸驗證和退出.但是現在無論是否登陸,使用者都能訪問所有的action,所以下一步我們要對使用者訪問進行授權.在yii裡是通過access control filter即訪問控制過濾器來實現使用者授權的.我們看一下乙個簡單的帶有訪問控制的controller:

class admindefaultcontroller extends ccontroller

public function accessrules()

}

我們在filters方法中設定具體的filter.我們可以看到在filters方法返回的array裡有accesscontrol引數,在ccontroller類中有乙個filteraccesscontrol方法:

public function filteraccesscontrol($filterchain)

在裡面新建了乙個caccesscontrolfilter例項,並且在setrules時傳入了accessrules()方法返回的引數.

$filter->filter($filterchain)則是繼續呼叫其它filter.

而所有具體的授權規則則是定義在accessrules中:

public function accessrules()

具體規則參見yii的手冊.

3.新增乙個驗證體系:

首先我們從cwebuser繼承乙個cadminuser:

class cadminwebuser extends cwebuser

我們需要把他放置到components中

如果是全域性應用則通過protected/config/main.php的components小節:

'user'=>array(

// enable cookie-based authentication

'class' => 'cadminuser',

'allowautologin'=>true,

'loginurl' => array('site/login'),

),

如果是在modules中則在模組類的init方法中新增如下**:

$this->setcomponents(array(

'adminuser' => array(

'class' => 'cadminwebuser',

'allowautologin' => false,

)));

最後呼叫方式

//全域性應用

//在模組中

但僅僅這樣還不夠,我們還需要修改controller的filter,我們需要自定義乙個filter,來實現另乙個使用者的驗證和授權

第一步自定義乙個filter:

class cadminaccesscontrolfilter extends caccesscontrolfilter

} return true;

}}

再重寫ccontroller類的filteraccesscontroller方法

public function filteraccesscontrol($filterchain)

//在這裡我們使用自定義的filter類替換了原來的filter

ok,到這裡我們就可以在此controller的accessrules()中指定adminuser的授權了

在 DataGridView中新增乙個統計行的技巧

dim mtalbe as new datatable mtalbe mbl.getlist pstrsql tables 0 dim dr as datarow mtalbe.newrow dr.item 0 mtalbe.rows.count dr.item 9 mtalbe.compute s...

怎麼在ubuntu中新增乙個使用者並賦予管理員許可權

用useradd時,並沒有建立同名的使用者主目錄。例子 adduser user1 這樣他就會自動建立使用者主目錄,建立使用者同名的組。root ubuntu sudo adduser db sudo password for xx 輸入xx使用者的密碼,出現如下資訊 正在新增使用者 db 正在新增...

在centos7中新增乙個新使用者,並授權

建立新使用者 建立乙個使用者名為 yjm root localhost adduser yjm為這個使用者初始化密碼,linux會判斷密碼複雜度,不過可以強行忽略 root localhost passwd yjm更改使用者 yjm的密碼 新的 密碼 無效的密碼 密碼未通過字典檢查 過於簡單化 系統...