wangerting1988 2011-09-20 14:08:37 5782次浏览 10条回复 0 0 0

我现在的问题是,前台登录以后,后台也登录了。我的前后台登录是两个页面,我是用控制器里的accessRules()这个函数来判断用户是否登录的。我应该怎么做,是在配置文件main.php里配置吗? 请大侠们帮帮忙!:)

  • 回复于 2011-09-20 14:34 举报

    素吗 。。。。

  • 回复于 2011-09-20 14:59 举报

    这一大堆代码,说明了个素吗问题?

  • 回复于 2011-09-20 15:12 举报

    我想用accessRules()这个函数来判断用户是否登录,但是前台登录以后,后台好像也登录了,我进后台的每一个页面说我没有权限,应该是到登录页面让我登录才对。

  • 回复于 2011-09-20 15:25 举报

    我应该是要新加一个验证体系,但是网上的说的不明白。你能写一个例子吗?

  • 回复于 2011-09-20 16:56 举报

    解决了
    以下是源码,不过我还是不怎么理解。网上down下来以后就可以用,也是我要的效果。
    通过扩展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',
        )
    )
    ?>
    
  • 回复于 2011-09-20 17:08 举报

    飘过来学习的。

  • 回复于 2011-09-28 17:16 举报

    看看 是什么好东东

  • 回复于 2012-08-02 16:57 举报

    见贴必回

  • 回复于 2012-10-31 14:03 举报

    研究研究~

  • 回复于 2013-08-10 17:20 举报

    其实简单点设置前后台用不用的 stateKeyPrefix 就可以区分前后台的登录了,退出的方法用
    Yii::app()->user->logout(false); 这样就不会同时退出了.

您需要登录后才可以回复。登录 | 立即注册