分享

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

 朱启发 2014-11-13
通过扩展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的属性访问用户数据库中列。 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多