`
stevecj
  • 浏览: 106018 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

    博客分类:
  • PHP
 
阅读更多
通过扩展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中新增一个用户验证的方法详解

    Yii::app()-&gt;user-&gt;login($identity); } else { echo $identity-&gt;errorMessage; } ``` 当用户退出时,调用`logout()`方法: ```php Yii::app()-&gt;user-&gt;logout(); ``` `Yii::app()-&gt;user` 是Yii中的一个组件,它...

    Yii 的登录流程

    此时,可以调用`Yii::app()-&gt;user-&gt;login`方法使用户登录系统。 接下来我们深入探讨`Yii::app()-&gt;user-&gt;login`方法的具体实现。该方法定义在`CWebUser`类中,主要负责以下几个关键步骤: 1. **更改用户身份**:...

    Yii框架实现的验证码、登录及退出功能示例

    如果验证成功,`authenticate()`会设置`_identity`属性,然后在`login()`方法中,使用`Yii::app()-&gt;user-&gt;login()`将用户身份信息保存到会话,以便进行后续的会话管理。 退出功能相对简单,可以通过`Yii::app()-&gt;...

    Yii框架用户登录session丢失问题解决方法

    本文实例讲述了Yii框架用户登录session丢失问题解决方法。分享给大家供大家参考,具体如下: 最近做项目,使用的是YII框架,用户的登录总是出现有时候能登录,有时候不能登录的情况。...Yii::app()-&gt;getS

    Yii框架登录流程分析

    `Yii::app()-&gt;user-&gt;login`方法是实现用户登录的核心所在,它属于`CWebUser`类。在`CWebUser`类的`login`方法中,会调用`changeIdentity`来改变当前用户的身份信息,包括用户ID、用户名和持久化状态。然后,`login`...

    Yii中实现处理前后台登录的新方法

    'class'=&gt;'WebUser', // WebUser是一个扩展自CWebUser的类,可以在此基础上自定义用户登录相关的行为 'stateKeyPrefix'=&gt;'member', // 设置一个特定的前缀,用以区分前台和后台的session 'allowAutoLogin'=&gt;true,...

    yii-return-url:通过将请求用作持久存储,跨多个选项卡维护返回 URL 的状态

    你可能会说,Yii 已经用CWebUser::getReturnUrl()和CWebUser::setReturnUrl()方法完美地处理了 returnUrl。 为什么不使用那些? 这些方法将 returnUrl 存储到用户会话中的单个变量中。 当我们打开多个选项卡时,这...

    yii框架源代码

    9. **扩展性**:Yii的插件和模块系统允许开发者轻松添加新的功能,`CModule`类是模块的基类,` yiisoft/extensions `目录存放第三方扩展。 通过对Yii 1.1.14源代码的深入学习,开发者不仅可以提升自己的PHP编程技巧...

    Yii权威指南思维导图

    Yii框架是基于组件的高性能PHP框架,用于开发Web2.0应用。该框架以其高效、灵活和可扩展性而闻名,被广泛...通过仔细研究这个思维导图,开发者可以更深入地理解Yii的每一个方面,从而更好地运用到实际项目开发中去。

    yiiadvancedstructure:Yii 1.1 App 高级结构

    在“Yii 1.1 App 高级结构”中,我们将深入探讨该框架如何组织应用程序的各个部分,以及如何利用这些结构优化项目。 ### 1. MVC 设计模式 Yii 采用 Model-View-Controller(MVC)设计模式,将应用程序的逻辑分为三...

    深入解析yii权限分级式访问控制的实现(非RBAC法)

    通过在用户表(tbl_user)中添加role字段,然后根据角色字段的值来区分管理员和普通用户,实现不同角色用户的不同访问控制。具体实现步骤包括: 1. 创建一个名为WebUser的组件,这个组件是对CWebUser的一个扩展,它...

Global site tag (gtag.js) - Google Analytics