通过扩展CWebUser添加信息到Yii:app()->user

通过扩展CWebUser添加信息到Yii:app()->user
╃巡洋艦㊣ 发布于 2011年03月03日

我发现了一个更好的解决方案。

(您的登录验证可能与我的版本不同,因此你将会使用适合脚本,以满足您的需求。我只告诉你我的意思)

步骤:1、添加$user属性到UserIdentity类。 添加getUser()方法-getter上面这个属性。加setUser($user)方法-setter上面这个属性,它可以赋值给user的信息通过$user这个属性。

我的UserIdentity类例子:

<?php
class UserIdentity extends CUserIdentity
{
/**
* User's attributes
* @var array
*/
public $user;

public function authenticate()
{
$this->errorCode=self::ERROR_PASSWORD_INVALID;
$user=User::model()->findByAttributes(array('email'=>CHtml::encode($this->username)));

if ($user)
{
if ($user->password === md5($user->salt.$this->password)) {
$this->errorCode=self::ERROR_NONE;
$this->setUser($user);
}
}

unset($user);
return !$this->errorCode;
}

public function getUser()
{
return $this->user;
}

public function setUser(CActiveRecord $user)
{
$this->user=$user->attributes;
}
}
?>

现在用户的属性已经设置,创建WebUser类并把它放在/protected/components

<?php
class WebUser extends CWebUser
{
public function __get($name)
{
if ($this->hasState('__userInfo')) {
$user=$this->getState('__userInfo',array());
if (isset($user[$name])) {
return $user[$name];
}
}

return parent::__get($name);
}

public function login($identity, $duration) {
$this->setState('__userInfo', $identity->getUser());
parent::login($identity, $duration);
}
}
?>

记得设置一下这个类Yii::app()->user

<?php
'components'=>array(
'user'=>array(
'class'=>'WebUser',
)
)
?>

应该工作了,你现在可以用user的属性访问用户数据库中列。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值