上一章 我们说了 sign的生成 那么 我们如何确定这个sign的准确性呢 下来 我们说说 校验sign的那些事

在拿到header里面的内容之后 我们首先需要对其内容的基本参数做一个校验 我们补充下Common类的代码 

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019/8/15
 * Time: 15:00
 */

namespace app\index\controller;


use app\common\lib\execption\ApiException;
use think\Controller;

class Common extends Controller
{
    public function _initialize(){
        $this->checkRequestAuth();
    }

    public function checkRequestAuth(){
        $header = request()->header();
        
        ##判断header中基础参数 
        if(empty($header[\'sign\'])){
            throw new ApiException(\'sign不存在\',400);
        }
        if(!in_array($header[\'app_type\'],config("app.app_types"))){
            throw new ApiException(\'app_type不合法\',400);
        }
    }
}

判定基础参数之后 我们就要进入正题了 校验sign 那么在鉴权类 IAuth 里面新增 checkSignPass 方法 校验sign

 /**
     * 校验SIGN是否正常
     * @param $data
     */
    public static function checkSignPass($data){
      ##解密
$str = (new Aes())->decrypt($data[\'sign\']); if(empty($str)){ return false; }
      ##转换为数组
parse_str($str,$arr);
      ##判定条件根据需求可增加
if(!is_array($arr) || empty($arr[\'did\']) || $arr[\'did\'] != $data[\'did\']){ return false; } return true; }

方法添加完成后 我们需要在Common里面进行校验

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019/8/15
 * Time: 15:00
 */

namespace app\index\controller;


use app\common\lib\execption\ApiException;
use app\common\lib\IAuth;
use think\Controller;

class Common extends Controller
{
    public $header = \'\';

    public function _initialize(){
        $this->checkRequestAuth();
    }

    public function checkRequestAuth(){
        $header = request()->header();

        ##判断header中基础参数
        if(empty($header[\'sign\'])){
            throw new ApiException(\'sign不存在\',400);
        }

        if(!in_array($header[\'apptype\'],config("app.app_types"))){
            throw new ApiException(\'app_type不合法\',400);
        }
      ##调用鉴权类校验sign的准确性 
        if(!IAuth::checkSignPass($header)){
            throw new ApiException(\'授权码sign失败\',401);
        }
      ##如果校验通过 将header值存起来 方便后面使用
$this->header = $header; } }

到这里 sign基本就校验完毕 后面只需要业务逻辑类 继承Common类就可以啦  当然 还有一些细节需要我们处理  下一章 我们再来进行

版权声明:本文为we-jack原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/we-jack/p/11359159.html