YII2框架阅读随笔

今天阅读的是vendor/yiisoft/yii2/web/User.php

<?php
/**
 * @link http://www.yiiframework.com/
 * @copyright Copyright (c) 2008 Yii Software LLC
 * @license http://www.yiiframework.com/license/
 */

namespace yii\web;  //命名空间

use Yii;
use yii\base\Component;
use yii\base\InvalidConfigException;
use yii\base\InvalidValueException; //加载相关的类

class User extends Component  //User 类继承Compoent类,是用于管理用户身份验证状态“用户”应用程序组件的类。
{
    const EVENT_BEFORE_LOGIN = ‘beforeLogin‘;
    const EVENT_AFTER_LOGIN = ‘afterLogin‘;
    const EVENT_BEFORE_LOGOUT = ‘beforeLogout‘;
    const EVENT_AFTER_LOGOUT = ‘afterLogout‘; //const定义一些常量。

   public $identityClass; //标识对象的类名。

    public $enableAutoLogin = false; //是否启用基于cookie的登录。默认为false。请注意,如果[enableSession]是假此属性将被忽略。
public $enableSession = true;  //否使用会话跨多个请求持续认证状态。

    public $loginUrl = [‘site/login‘]; //登录URL时loginRequired()被调用。第一个是控制器,第二个是方法,后面跟的是参数。

    public $identityCookie = [‘name‘ => ‘_identity‘, ‘httpOnly‘ => true];//COOKIE的配置,仅当登录时是正确的。

    public $authTimeout; //用户登录的状态,如果非活动状态,注销。

    public $absoluteAuthTimeout;

    public $autoRenewCookie = true;//每次请求页面时自动更新COOKIE。

    public $idParam = ‘__id‘;//用来储存ID的值,以下同理。

    public $authTimeoutParam = ‘__expire‘;

    public $absoluteAuthTimeoutParam = ‘__absoluteExpire‘;

    public $returnUrlParam = ‘__returnUrl‘;

    private $_access = [];

        public function init() //初始化程序应用组件。
    {
        parent::init();//调用init()方法。
        if ($this->identityClass === null) {  //如果此变量为空,那么会执行一个报错信息,identityClass必须要设置。               throw new InvalidConfigException(‘User::identityClass must be set.‘);
        }
        if ($this->enableAutoLogin && !isset($this->identityCookie[‘name‘])) { //如果$this->enableAutoLogin为true并且$this->identityCookie[‘name‘]没设置,抛出一个信息,身份的Cookie中必须包含‘name‘元素。

            throw new InvalidConfigException(‘User::identityCookie must contain the "name" element.‘);
        }
    }

    private $_identity = false; //设置此变量为false;

        public function getIdentity($autoRenew = true) //返回与当前登录的用户关联的标识对象
    {
        if ($this->_identity === false) { //如果此变量为false,$this->enableSession是真的并且$autoRenew为true。读取相应的标识对象数据。
            if ($this->enableSession && $autoRenew) {
                $this->_identity = null;
                $this->renewAuthStatus();
            } else {            //否则,返回null.
                return null;
            }
        }

        return $this->_identity;    
    }

            public function setIdentity($identity)  //设置用户身份
    {
        if ($identity instanceof IdentityInterface) {//如果$identity满足IdentityInterface验证方法。那么使$this->_identity =$identity,$this->_access为数组。
            $this->_identity = $identity;
            $this->_access = [];
        } elseif ($identity === null) { //如果$identity为空,设置$this->_identity =null.
            $this->_identity = null;
        } else {
            throw new InvalidValueException(‘The identity object must implement IdentityInterface.‘);//都不满足的话,抛出一个信息,身份对象必须满足IdentityInterface.
    }

    public function login(IdentityInterface $identity, $duration = 0)//用户登录
    {
        if ($this->beforeLogin($identity, false, $duration)) { //如果调用beforeLogin方法返回值是true,那么走下面的程序。                $this->switchIdentity($identity, $duration);
            $id = $identity->getId();              //$id等于 $identity->getId()该方法返回的值。
            $ip = Yii::$app->getRequest()->getUserIP();   //ip为Yii::$app->getRequest()->getUserIP()返回的IP。
            if ($this->enableSession) {
                $log = "User ‘$id‘ logged in from $ip with duration $duration.";//如果$this->enableSession是真的话,存储在Cookie中的信息将会在$duration后到期。
            } else {
                $log = "User ‘$id‘ logged in from $ip. Session not enabled.";//如果是假的话,$duration将会在这种没有意思的情况下忽略。
            }
            Yii::info($log, __METHOD__);
            $this->afterLogin($identity, false, $duration);
        }

        return !$this->getIsGuest();
    }

    public function loginByAccessToken($token, $type = null)//给用户返回登录的制定令牌。
    {
        /* @var $class IdentityInterface */
        $class = $this->identityClass;
        $identity = $class::findIdentityByAccessToken($token, $type);
        if ($identity && $this->login($identity)) {//登录成功,返回身份用户。失败则返回null.
            return $identity;
        } else {
            return null;
        }
    }
时间: 2024-08-10 16:25:41

YII2框架阅读随笔的相关文章

[PHP]Yii2框架的坑

[PHP]Yii2框架的坑.md-/Users/zjh/Documents/我的文章/[PHP]Yii2框架的坑 html{font-family: sans-serif;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%}body{margin: 0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{displ

Yii2框架bootstrap样式理解

Yii2框架默认采用了bootstrap作为CSS风格,各种视图类组件都如此.之前一直采用默认风格,并在必要的时候添加或者修改一下class来达到目的.但在改版Yii1.1的orange项目时,发现之前也是套的模板,其实没有好好去理解一下bootstrap的那套规则,所以顺便大致梳理一下吧.以basic模板为例,对照http://v3.bootcss.com/css/ 上的内容进行. 看layouts/main.php,Yii2默认以HTML5文档类型进行的了,但语言默认是en-US,所以要改,

Yii2框架那些折磨人的坑

说点闲话 距离上次写博客,已经有一年了.在动手写之前,总是带着深深的罪恶感.被它折磨许久,终于,还是,动手了. 值得庆祝的一件事:最近开始健身了.每天动感单车45分钟,游泳45分钟,真的是(生)爽(不)到(如)爆(死). 好了,扯淡完毕,步入正题. ActiveRecord被莫名写入? 准备知识 ActiveRecord的基本用法.如果不理解,可参考这里. 代码现场 /** * @property integer $id * @property string $name * @property

Yii2框架RESTful API教程(二) - 格式化响应,授权认证和速率限制

之前写过一篇Yii2框架RESTful API教程(一) - 快速入门,今天接着来探究一下Yii2 RESTful的格式化响应,授权认证和速率限制三个部分 一.目录结构 先列出需要改动的文件.目录如下: web ├─ common │ └─ models │ └ User.php └─ frontend ├─ config │ └ main.php └─ controllers └ BookController.php 二.格式化响应 Yii2 RESTful支持JSON和XML格式,如果想指定

YII2框架详解

yii2框架的安装我们在之前文章中已经提到下面我们开始了解YII2框架 Yii2的应用结构: 目录篇: advance版本的特点是:根目录下预先分配了三个模块,分别是前台.后台.控制台模块. 1.backend 它主要用于管理后台,网站管理员来管理整个系统. assets 目录用于存放前端资源包PHP类. 这里不需要了解什么是前端资源包,只要大致知道是用于管理CSS.js等前端资源就可以了. config 用于存放本应用的配置文件,包含主配置文件 main.php 和全局参数配置文件 param

Yii2框架RESTful API教程(一) - 快速入门

前不久做一个项目,是用Yii2框架写一套RESTful风格的API,就去查了下<Yii 2.0 权威指南 >,发现上面写得比较简略.所以就在这里写一篇教程贴,希望帮助刚接触Yii2框架RESTful的小伙伴快速入门. 一.目录结构 实现一个简单地RESTful API只需用到三个文件.目录如下: frontend ├─ config │ └ main.php ├─ controllers │ └ BookController.php └─ models └ Book.php 二.配置URL规则

yii2 框架为什么难在中国国内推广开来?

晚上准备重新安装yii2框架,然后运行 composer global require "fxp/composer-asset-plugin:1.0.0" 足足花费了30分钟才运行完毕... 然后在运行 composer create-project --prefer-dist yiisoft/yii2-app-basic basic 一直都是等待,忍不住开VPN,结果悲剧的事情就开始了.网络断了,是断路由,一直都是连接. 一筹莫展的焦急用手机开窝蜂数据,搜索答案,15分钟之后,再刷新

Yii2框架RESTful API教程

前不久做一个项目,是用Yii2框架写一套RESTful风格的API,就去查了下<Yii 2.0 权威指南 >,发现上面写得比较简略.所以就在这里写一篇教程贴,希望帮助刚接触Yii2框架RESTful的小伙伴快速入门. 一.目录结构 实现一个简单地RESTful API只需用到三个文件.目录如下: frontend ├─ config │ └ main.php ├─ controllers │ └ BookController.php └─ models └ Book.php 二.配置URL规则

Yii2框架实现计数器功能

思路: 因为yii2框架没有像tp框架那样的setinc这样的累加函数,所以只能在每次累加之前查出当前的这个字段的值,然后写算法累加入库 例如: