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

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

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

步骤: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',
    )
)
?>

发表评论