YII2框架阅读随笔3

今天继续阅读vendor/yiisoft/yii2/web/User.php
  protected function loginByCookie() //用户的日志。
    {
        $value = Yii::$app->getRequest()->getCookies()->getValue($this->identityCookie['name']); //根据登录的Cookie中name字段取得用户的日志信息。
        if ($value === null) {
            return;            //如果$value的值为空,则返回。
        }

        $data = json_decode($value, true); //用json_decode的方式对$value的值做处理,带上后缀的参数true.处理后的值用$data表示。
        if (count($data) !== 3 || !isset($data[0], $data[1], $data[2])) { //如果$data里面的值得数量不等于3或者没有设置$data[0],$data[1],$data[2]里面的值,返回。
            return;
        }

        list ($id, $authKey, $duration) = $data; //把$data中0,1,2下标的值分别赋给$id,$authKey,$duration.
        /* @var $class IdentityInterface */
        $class = $this->identityClass;
        $identity = $class::findIdentity($id); //$identity由静态类方法调用,参数是$id。
        if ($identity === null) {  //如果$identity的值全等于null,则返回。
            return;
        } elseif (!$identity instanceof IdentityInterface) { //如果$identity不符合IdentityInterface类中的运算,则抛出一个新的提示:必须返回一个对象。
            throw new InvalidValueException("$class::findIdentity() must return an object implementing IdentityInterface.");
        }

        if ($identity->validateAuthKey($authKey)) {
            if ($this->beforeLogin($identity, true, $duration)) { //如果$this->beforeLogin($identity, true, $duration)有值,即$event->isValid有值,则走下面这一步。
                $this->switchIdentity($identity, $this->autoRenewCookie ? $duration : 0); //三元运算符,如果$this->autoRenewCookie存在,则第二个参数为$duration,如果不存在,第二个参数为0.
$ip = Yii::$app->getRequest()->getUserIP(); //静态调用YII类,值赋值给$ip;
                Yii::info("User '$id' logged in from $ip via cookie.", __METHOD__);//信息内容为User '$id' logged in from $ip via cookie。
                $this->afterLogin($identity, true, $duration);
            }
        } else {
            Yii::warning("Invalid auth key attempted for user '$id': $authKey", __METHOD__);//如果$identity->validateAuthKey($authKey)没值,返回错误信息。
        }
    }

 public function logout($destroySession = true)   //用户退出默认$destroySession为真。
    {
        $identity = $this->getIdentity();
        if ($identity !== null && $this->beforeLogout($identity)) {//如果这两个条件同时成立,那么就把$id,$ip的值得到。
            $this->switchIdentity(null);
            $id = $identity->getId();
            $ip = Yii::$app->getRequest()->getUserIP();
            Yii::info("User '$id' logged out from $ip.", __METHOD__);//信息内容,这个id的用户注销。
            if ($destroySession && $this->enableSession) {
                Yii::$app->getSession()->destroy();  //如果$destroySession为真并且$this->enableSession为真,调用静态方法销毁数据,达到退出的目的。
            }
            $this->afterLogout($identity);
        }

        return $this->getIsGuest(); //调用getIsGuest方法,使$this->getIdentity()的值为null.
    }


      public function getIsGuest()
    {
        return $this->getIdentity() === null;//使$this-<getIdentity()的值全等于null.
    }

      public function getId()
    {
        $identity = $this->getIdentity();

        return $identity !== null ? $identity->getId() : null; //返回 $identity,如果$identity不为null,返回$identity->getId();如果为null,返回null.
    }

      public function getReturnUrl($defaultUrl = null)//返回的网址,成功登陆后重定向的url.
    {
        $url = Yii::$app->getSession()->get($this->returnUrlParam, $defaultUrl);//url赋值。参数为$this->returnUrlParam,$defaultUrl.
        if (is_array($url)) {
            if (isset($url[0])) { //如果$url为数组并且$url[0]下标存在的话,返回一个重定向的url.
                return Yii::$app->getUrlManager()->createUrl($url);
            } else {
                $url = null;  
            }
        }

        return $url === null ? Yii::$app->getHomeUrl() : $url;//三元运算符。
    }

     public function setReturnUrl($url)
    {
        Yii::$app->getSession()->set($this->returnUrlParam, $url);
    }

    public function loginRequired($checkAjax = true) //将用户重定向浏览器到登录页面。
    {
        $request = Yii::$app->getRequest();  //$request的值为访问静态类得到的值。
        if ($this->enableSession && (!$checkAjax || !$request->getIsAjax())) {
            $this->setReturnUrl($request->getUrl());
        }
        if ($this->loginUrl !== null) { //如果不为null,$loginUrl=$this->loginUrl强制转换为数组形式。
            $loginUrl = (array) $this->loginUrl;
            if ($loginUrl[0] !== Yii::$app->requestedRoute) {
                return Yii::$app->getResponse()->redirect($this->loginUrl);
            }
        }
        throw new ForbiddenHttpException(Yii::t('yii', 'Login Required'));//抛出提示。
    }

 

posted @ 2016-04-12 22:33  TTKKK  阅读(224)  评论(0编辑  收藏  举报