上一章 我们说了 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类就可以啦  当然 还有一些细节需要我们处理  下一章 我们再来进行

最新文章

  1. Npm包的开发
  2. 用Qt写软件系列五:一个安全防护软件的制作(3)
  3. 【leetcode】Binary Tree Level Order Traversal I &amp; II
  4. git秘钥配置--转
  5. [原创]java WEB学习笔记50:文件上传案例
  6. USACO 4.1.2 栅栏的木料
  7. web前端开发(4)
  8. 一个简单的脚本让你的ubuntu14.04记忆屏幕亮度
  9. uva11992-Fast Matrix Operations(区间增值、改值)
  10. favicon
  11. JPEG流封装AVI视频
  12. 从无到有&lt;前端异常监控系统&gt;落地
  13. Android webView包装WebAPP
  14. Oracle做insert或者update时未提交事务导致表锁定解决办法
  15. 基于python的机器学习开发环境安装(最简单的初步开发环境)
  16. error LNK2019-无法解析的外部符号 _main-该符号在函数 ___tmainCRTStartup 中被引用
  17. ELK新手教程(二)
  18. CSS3动画理解与应用
  19. 【HTTP header】【Access-Control-Allow-Credentials】跨域Ajax请求时是否带Cookie的设置
  20. JPA级联(一对一 一对多 多对多)注解【实际项目中摘取的】并非自己实际应用

热门文章

  1. 深入学习Spring框架(三)- AOP面向切面
  2. 从四个属性的角度来理解C语言的指针也许会更好理解
  3. VUE+element tree 实现权限管理
  4. 【Netty】使用解码器Decoder解决TCP粘包和拆包问题
  5. 00ff00 颜色信息
  6. stack用法,queue用法,
  7. 机器学习-FP Tree
  8. Django的学习进阶(三)————ORM
  9. mpvue的使用,包含axios、router的集成等完美结合小程序
  10. mysql添加外键失败解决方案