yii 的确是一个强大而臃肿的框架,简单的小项目,或者只做后台接口调用的项目,建议不要用。
今天记录一下yii使用中cwebuser(Yii::app()->user->login())登录;
1、准备工作
官方标准做法,在components里加一个UserIdentity.php文件,class UserIdentity extends CUserIdentity
继承CUserIdentity,然后在UserIdentity类里面写验证的业务过程(比如你在哪张表去查数据,取数据之类)
2、开始登录
new 一个UserIdentity,传入参数,然后执行验证方法
例:
$this->_identity=new
UserIdentity($this->username,$this->password);
$this->_identity->authenticate();
3、调用Yii::app()->user->login()保存数据(session)
调用YII组件设置session
Yii::app()->user->login($this->_identity,$duration);//$duration,session过期时间,此方法在/framework/web/auth/CWebUser.php LINE 222
$this->_identity对象中getId(),getName()方法一般返回用户名,用户ID等,
官方的CUserIdentity类里,都是返回用户名($this->username)//此方法在/framework/web/auth/CUserIdentity LINE 78
如果需要UID的话,可以在UserIdentity重写getId()方法,这样你在使用yii::app()->user->getId()的时候,调用的就是UID而不是username了。
这样就可以通过yii::app()->user->getId(),yii::app()->user->getName()访问SESSION里的用户数据,
如果还需要放其他数据,在CUserIdentity类里重写getPersistentStates()方法,然后把你要保存的数据以数据形式return 出来。
这里你就可以通过yii::app()->user->getState(‘key‘);这种形式调用,这里的key是getPersistentStates()方法return出来的数组key。
此文说明一个yii用户验证的思路,不建议复制文中任何一句代码。可以在阅读理解后,自己操作。有基础功力可以看看/framework/web/auth/CWebUser.php源码