Yii验证

Yii验证  

Yii auth framework 的核心一块是一个事先声明的user application component(用户应用部件),实现IWebUser接口的对象。此用户部件代表当前用户存储的身份信息。我们能够通过 Yii::app()->user在任何地方来获取它。

 

使用此用户部件,可以通过CWebUser::isGuest检查一个用户是否登陆。可以login (登陆)或者logout (注销)一个用户;可以通过CWebUser::checkAccess检查此用户是否能够执行特定的操作;还可以获得此用户的unique identifier(唯一标识)和别的身份信息。

 

定义身份类(Defining Identity Class)

 

为了验证一个用户,我们定义一个有验证逻辑的身份类。这个身份类实现IUserIdentity 接口。不同的类可能实现不同的验证方式(例如:OpenID,LDAP)。最好是继承 CUserIdentity,此类是居于用户名和密码的验证方式。

 

定义身份类的主要工作是实现IUserIdentity::authenticate方法。在用户会话中根据需要,身份类可能需要定义别的身份信息

 

下面的例子,我们使用Active Record来验证提供的用户名、密码和数据库的用户表是否吻合。我们通过重写getId函数来返回验证过程中获得的_id变量(缺省的实现则是返回用户 名)。在验证过程中,我们还借助CBaseUserIdentity::setState函数把获得的title信息存成一个状态。

 

classUserIdentity extends CUserIdentity

{

private $_id; 

public function authenticate()

{

$record=User::model()->findByAttributes(array('username'=>$this->username)); 

if($record===null)

$this->errorCode=self::ERROR_USERNAME_INVALID;

 elseif($record->password!==md5($this->password))

$this->errorCode=self::ERROR_PASSWORD_INVALID; 

else{$this->_id=$record->id; 

$this->setState('title', $record->title); 

$this->errorCode=self::ERROR_NONE; 

}

return !$this->errorCode;

 }

public function getId()

{

return$this->_id; 

}

}

作为状态存储的信息(通过调用CBaseUserIdentity::setState)将被传递给CWebUser。而后者则把这些信息存放在一 个永久存储媒介上(如session)。我们可以把这些信息当作CWebUser的属性来使用。例如,为了获得当前用户的title信息,我们可以使用 Yii::app()->user->title(这项功能是在1.0.3版本引入的。在之前的版本里,我们需要使用 Yii::app()->user->getState('title'))。

 

提示: 缺省情况下,CWebUser用session来存储用户身份信息。如果允许基于cookie方式登录(通过设置 CWebUser::allowAutoLogin为 true),用户身份信息将被存放在cookie中。确记敏感信息不要存放(例如 password) 。

 

登录和注销(Login and Logout)

 

使用身份类和用户部件,我们方便的实现登录和注销。

 

// 使用提供的用户名和密码登录用户$identity=newUserIdentity($username,$password); if($identity->authenticate())Yii::app()->user->login($identity); elseecho$identity->errorMessage; ...... // 注销当前用户Yii::app()->user->logout();

缺省情况下,用户将根据session configuration完成一序列inactivity动作后注销。设置用户部件的allowAutoLogin属性为true和在 CWebUser::login方法中设置一个持续时间参数来改变这个行为。即使用户关闭浏览器,此用户将保留用户登陆状态时间为被设置的持续时间之久。 前提是用户的浏览器接受cookies。

 

// 保留用户登陆状态时间7天// 确保用户部件的allowAutoLogin被设置为true。Yii::app()->user->login($identity,3600*24*7);

使用此用户部件,可以通过CWebUser::isGuest检查一个用户是否登陆。可以login (登陆)或者logout (注销)一个用户;可以通过CWebUser::checkAccess检查此用户是否能够执行特定的操作;还可以获得此用户的unique identifier(唯一标识)和别的身份信息。

 

定义身份类(Defining Identity Class)

 

为了验证一个用户,我们定义一个有验证逻辑的身份类。这个身份类实现IUserIdentity 接口。不同的类可能实现不同的验证方式(例如:OpenID,LDAP)。最好是继承 CUserIdentity,此类是居于用户名和密码的验证方式。

 

定义身份类的主要工作是实现IUserIdentity::authenticate方法。在用户会话中根据需要,身份类可能需要定义别的身份信息

 

下面的例子,我们使用Active Record来验证提供的用户名、密码和数据库的用户表是否吻合。我们通过重写getId函数来返回验证过程中获得的_id变量(缺省的实现则是返回用户 名)。在验证过程中,我们还借助CBaseUserIdentity::setState函数把获得的title信息存成一个状态。

 

classUserIdentity extends CUserIdentity

{

private $_id; 

public function authenticate()

{

$record=User::model()->findByAttributes(array('username'=>$this->username)); 

if($record===null)

$this->errorCode=self::ERROR_USERNAME_INVALID;

 elseif($record->password!==md5($this->password))

$this->errorCode=self::ERROR_PASSWORD_INVALID; 

else{$this->_id=$record->id; 

$this->setState('title', $record->title); 

$this->errorCode=self::ERROR_NONE; 

}

return !$this->errorCode;

 }

public function getId()

{

return$this->_id; 

}

}

作为状态存储的信息(通过调用CBaseUserIdentity::setState)将被传递给CWebUser。而后者则把这些信息存放在一 个永久存储媒介上(如session)。我们可以把这些信息当作CWebUser的属性来使用。例如,为了获得当前用户的title信息,我们可以使用 Yii::app()->user->title(这项功能是在1.0.3版本引入的。在之前的版本里,我们需要使用 Yii::app()->user->getState('title'))。

 

提示: 缺省情况下,CWebUser用session来存储用户身份信息。如果允许基于cookie方式登录(通过设置 CWebUser::allowAutoLogin为 true),用户身份信息将被存放在cookie中。确记敏感信息不要存放(例如 password) 。

 

登录和注销(Login and Logout)

 

使用身份类和用户部件,我们方便的实现登录和注销。

 

// 使用提供的用户名和密码登录用户$identity=newUserIdentity($username,$password); if($identity->authenticate())Yii::app()->user->login($identity); elseecho$identity->errorMessage; ...... // 注销当前用户Yii::app()->user->logout();

缺省情况下,用户将根据session configuration完成一序列inactivity动作后注销。设置用户部件的allowAutoLogin属性为true和在 CWebUser::login方法中设置一个持续时间参数来改变这个行为。即使用户关闭浏览器,此用户将保留用户登陆状态时间为被设置的持续时间之久。 前提是用户的浏览器接受cookies。

 

// 保留用户登陆状态时间7天// 确保用户部件的allowAutoLogin被设置为true。Yii::app()->user->login($identity,3600*24*7);

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值