## 1. 引入php-jwt包
composer require firebase/php-jwt
## 2. 生成token
```
//生成token
public function createJwt($userId = 'zq')
{
$key = md5('zq8876!@!'); //jwt的签发密钥,验证token的时候需要用到
$time = time(); //签发时间
$expire = $time + 14400; //过期时间
$token = array(
"user_id" => $userId,
"iss" => "http://www.najingquan.com/",//签发组织
"aud" => "zhangqi", //签发作者
"iat" => $time,
"nbf" => $time,
"exp" => $expire
);
$jwt = JWTUtil::encode($token, $key);
return $jwt;
}
```
## 3. 验证token
```
//校验jwt权限API
public function verifyJwt($jwt = '')
{
$key = md5('zq8876!@!');
try {
$jwtAuth = json_encode(JWTUtil::decode($jwt, $key, array('HS256')));
$authInfo = json_decode($jwtAuth, true);
$msg = [];
if (!empty($authInfo['user_id'])) {
$msg = [
'status' => 1001,
'msg' => 'Token验证通过'
];
} else {
$msg = [
'status' => 1002,
'msg' => 'Token验证不通过,用户不存在'
];
}
return $msg;
} catch (\Firebase\JWT\ExpiredException $e) {
echo json_encode([
'status' => 1003,
'msg' => 'Token过期'
]);
exit;
} catch (\Exception $e) {
echo json_encode([
'status' => 1002,
'msg' => 'Token无效'
]);
exit;
}
}
```
## 4. 测试
生成token
![](https://img.kancloud.cn/1e/a6/1ea669c6470c8dd8f4d45c720e5bd187_1531x361.png)
验证token
![](https://img.kancloud.cn/d9/49/d94957366e0503fb94b8554d69ffd5a3_1359x477.png)
- ThinkPHP6 安装与更新
- PHP编码规范-保障团队代码风格一致
- 通用化API数据格式-简单事情极致化
- 健壮系统服务-杜绝无效请求
- 健壮系统服务-不可预知得内部异常处理
- 健壮系统服务-变量全局过滤
- 健壮系统服务-令牌Token统一生成与验证
- 集成JWT-实现token用户身份验证机制
- 敏感数据签名-集成SHA512withRSA算法签名
- API多版本控制
- 全站静态化
- 扩展类库的使用(extend)
- 开发自己的Composer扩展包
- 自定义命令行实现定时任务
- redis篇
- 集成redis-高速数据缓存
- redis分布式锁-解决缓存穿透,缓存击穿
- redis缓存雪崩解决方案
- redis数据队列-抗住高并发写
- redis限流-控制用户访问频率
- 集成swagger,自动生成接口文档
- 集成Oauth2.0 - 密码模式
- 服务分流-提升吞吐率, 提升请求性能
- Nginx 防止域名被恶意解析
- Nginx post请求大小限制
- mysql数据库备份
- 数据库全量备份-建议一周或者三天进行一次全量备份
- 数据库增量备份-一天一次增量备份
- 阿里云.idb文件单表恢复
- Git初始化
- Git简易的命令行入门教程
- webhook自动部署
- PHP源码保护和性能加速
- think-swoole 拥抱swoole的高性能
- 全站HTTPS安全访问