安装

composer require lcobucci/jwt 3.3

封装

<?php

namespace tools\jwt;

use Lcobucci\JWT\Builder;
use Lcobucci\JWT\Signer\Key;
use Lcobucci\JWT\Signer\Hmac\Sha256;
use Lcobucci\JWT\ValidationData;
use Lcobucci\JWT\Parser; class Token
{
static private $_config=[
'audience' => 'http://127.0.0.1/token',//接收人
'id' => '1806',//token的唯一标识,这里只是一个简单示例
'sign' => 'Mr.cao',//签名密钥
'issuer' => 'http://127.0.0.1/user_id',//签发人
'expire' => 3600*2 //有效期
]; //生成token
static public function getToken($k,$v)
{
$signer = new Sha256();
$time = time(); $token = (new Builder())->issuedBy(self::$_config['issuer']) // 签发人
->permittedFor(self::$_config['audience']) // 接收人
->identifiedBy(self::$_config['id'], true) // 唯一标识 可以自己写,也可以随机生成
->issuedAt($time) // 签发时间
->canOnlyBeUsedAfter($time - 1) // 生效时间
->expiresAt($time + 3600) // 过期时间
->withClaim($k, $v) // 用户id
->getToken($signer, new Key(self::$_config['sign'])); // 生成token
return (string)$token;
} //验证token
static public function verifyToken($token)
{
$signer = new Sha256();
$token = (new Parser())->parse((string) $token);
$data = new ValidationData(); //验证签发人
$data->setIssuer(self::$_config['issuer']);
//验证接收人
$data->setAudience(self::$_config['audience']);
//验证唯一表示
$data->setId(self::$_config['id']);
//签发人 和上述验证
if($token->verify($signer, self::$_config['sign']) && $token->validate($data)){
return true;
}else{
return false;
}
} //从token中获取信息
static public function getUserId($token,$k)
{
$res = self::verifyToken($token);
if (!$res){
return '无效的token';
}
$token = (new Parser())->parse((string)$token);
return $token->getClaim($k);
}
}

使用

use tools\jwt\Token;  //封装命名空间\类

//生成token
public function getToken(){
$token = Token::getToken(5);
return $token;
} //测试token
public function testToken(Request $request){
//接收token
$token = $request->param('token');
$data = Token::getTokenMessege($token);
return $data;
}

最新文章

  1. Opencv算法学习二
  2. 十一个行为模式之备忘录模式(Memento Pattern)
  3. android 模拟器上网问题
  4. 这回真的是挤时间了-PHP基础(三)
  5. phpcms模块开发简易教程
  6. 【收藏】android WebView总结
  7. 基于SSH2框架Struts2拦截器的登录验证实现(转)
  8. IQ一个人的智力和对科学知识的理解掌握程度。 EQ对环境和个人情绪的掌控和对团队关系的运作能力。 AQ挫折商 一个人面对困境时减除自己的压力、渡过难关的能力。
  9. 第8条:覆盖equals时遵守通用约定
  10. BZOJ3210: 花神的浇花集会
  11. javascript函数定义表达式和函数声明的区别
  12. React 入门最好的实例-TodoList
  13. C++ 面向对象学习2 构造方法
  14. cinder /etc/lvm/lvm.conf 注意点
  15. 如何让局域网内的其他电脑访问本机的mysql
  16. [BZOJ1007] [HNOI2008] 水平可见直线 (凸包)
  17. ZJOI 2019 游记
  18. TCP/IP 三次握手
  19. 针对监控摄像机(海康、大华等)录像 .h264 文件的流媒体播放设计
  20. CentOS7用yum快速搭建LAMP平台

热门文章

  1. 《图解TCP/IP》笔记
  2. [Python] 快速爬取当前城市所有租房网站房源及配置,一目了然
  3. bilibili插件推荐
  4. 女朋友突然问我DNS是个啥....
  5. postgresql修改postgres用户密码
  6. JVM虚拟机(三):Java内存区域
  7. 记:create-react-app暴露配置报错
  8. vue第一单元(初识webpack-webpack的功能-webpack的初步使用)
  9. Java源码赏析(六)Class&lt;T&gt; 类
  10. YZMCMS V5.3后台 SSRF