快速实现token验证

如何生成token

token是由指定数据(默认取$_REQUEST,除去token变量),通过键的升序排列 , 然后添加上 &token=[key值]进行md5加密。

/*
假定我们有一个获取文章内容的接口
接口地址为:/ecmsapi/index.php?mod=news&act=detail&id=1
此时我们的参数为 mod=news&act=detail&id=1

我们为上面的接口增加token验证
那么需要增加两个参数token与time(这两个参数可以自定义,time为时间戳)

于是我们的参数数组为
['mod' => 'news' , 'act' => 'detail' , 'id' => 1 , 'time' => 1599209279, 'token' => '']
通过对数据键值(去除token项)的升序排序为
['act' => 'detail' , 'id' => 1 , 'mod' => 'news' , 'time' => 1599209279]
生成加密前的字段串为
act=detail&id=1&mod=news&time=1599209279
与key值123456拼接为
act=detail&id=1&mod=news&time=1599209279&token=123456
进行md5加密的值为:d3589c5bbe0687ead8737a49a66ece7e

将token的值d3589c5bbe0687ead8737a49a66ece7e拼接到参数中得到新的接口地址:
/ecmsapi/index.php?mod=news&act=detail&id=1&time=1599209279&token=d3589c5bbe0687ead8737a49a66ece7e
*/

token验证

token验证十分简单,简单到可能仅需不到10行代码。

// 加载扩展
$tokenApi = $api->load('token' , [
    'token' => 'token',  // token参数名称,默认为"token",无特殊情况不需修改
    'time' => 'time',   // 时间参数,默认为"time",无特殊情况不需修改
    'key' => '123456', // key值,用于token加密,默认为"ecmsapitoken",设置得越复杂越好
    'timeout' => 60 // token有效时间,单位秒。默认为 600,根据自身情况设定最佳值
]);

// 验证
$code = $tokenApi->check(); // 获取验证结果  0:失败 1:成功 -1:超时

getOption

功能:获取配置信息
参数:

  • $name 获取名称

setOption

功能:设置配置
参数:

  • $name 配置名称。若此参数为数组,表示配置多项,第二个参数将失效。
  • $value 需要配置的值

param

功能:获取token功能所用到的数据
参数:

  • $param 指定数据,默认为null。当值为null时,将自动获取$_REQUEST的值
  • $type 是否自动去除token项,默认为true。

build

功能:生成token值
参数:

  • $param 指定用于生成token的数据,默认为null。为null时,将自动获取$_REQUEST的值

query

功能:将数据接拼成字符串
参数:

  • $param 指定用于生成token的数据,默认为null。为null时,将自动获取$_REQUEST的值
  • $type 是否将token拼接上去,默认为true。

check

功能:验证token,返回验证状态。成功:1,失败:0,超时:-1
参数:

  • $param 指定用于验证的数据,默认为null。为null时,将自动获取$_REQUEST的值