通过扩展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的属性访问用户数据库中列。
分享到:
相关推荐
Yii::app()->user->login($identity); } else { echo $identity->errorMessage; } ``` 当用户退出时,调用`logout()`方法: ```php Yii::app()->user->logout(); ``` `Yii::app()->user` 是Yii中的一个组件,它...
此时,可以调用`Yii::app()->user->login`方法使用户登录系统。 接下来我们深入探讨`Yii::app()->user->login`方法的具体实现。该方法定义在`CWebUser`类中,主要负责以下几个关键步骤: 1. **更改用户身份**:...
如果验证成功,`authenticate()`会设置`_identity`属性,然后在`login()`方法中,使用`Yii::app()->user->login()`将用户身份信息保存到会话,以便进行后续的会话管理。 退出功能相对简单,可以通过`Yii::app()->...
`Yii::app()->user->login`方法是实现用户登录的核心所在,它属于`CWebUser`类。在`CWebUser`类的`login`方法中,会调用`changeIdentity`来改变当前用户的身份信息,包括用户ID、用户名和持久化状态。然后,`login`...
'class'=>'WebUser', // WebUser是一个扩展自CWebUser的类,可以在此基础上自定义用户登录相关的行为 'stateKeyPrefix'=>'member', // 设置一个特定的前缀,用以区分前台和后台的session 'allowAutoLogin'=>true,...