在根目录下的app目录中创建middleware目录,在其下创建CheckToken.php文件
*app/middleware/CheckToken.php*
```
<?php
namespace app\middleware;
use thans\jwt\facade\JWTAuth;
use thans\jwt\exception\JWTException;
class CheckToken
{
public function handle($request, \Closure $next)
{
// OPTIONS请求直接返回
if ($request->isOptions()) {
return response();
}
try {
JWTAuth::auth();
}catch (JWTException $e) {
return json($e->getMessage());
}
return $next($request);
}
}
```
##### ② 起别名
给该中间件起个别名,在根目录下的config/middleware.php文件中
![](https://img.kancloud.cn/d3/dd/d3dd148adf46ca07def0cfdf24585bb5_1054x509.png)
##### ③ 在路由文件中使用中间件
![](https://img.kancloud.cn/b3/b8/b3b8b346dcc46d0c3b10715bf21cebc1_956x601.png)
##### ④ 创建对应的方法
在第三步中我们创建了一个getUserInfo()方法,现在在User.php文件中创建
```
public function getUserInfo() {
return json(['id'=>1, 'name'=> '啦啦啦']);
}
```
![](https://img.kancloud.cn/91/57/9157a8f6097221713fd7065721163d3b_918x488.png)
⑤ 验证一下
刚刚创建的token必然过期了,咱重新获取一条
![](https://img.kancloud.cn/d9/3a/d93a0c60992bbd3d86aa5008e2530ba8_1107x561.png)
现在验证一下,请求userinfo方法,并在header中添加参数Authorization,
注意:token值需要加上bearer ,bearer后的空格也要的。
![](https://img.kancloud.cn/2a/cb/2acbe76e7e49e26c5be6e7e26cfa6b58_915x508.png)
过了一分钟后,我们再来试一试
![](https://img.kancloud.cn/02/11/02112997f08348525d8c8bbc3bc79b13_735x457.png)
可以看到token验证提示,该通过过期了,这个插件成功了,并没有继续往下走,把之前的信息返回。
(3).注销token
这个插件在github中的文档中没有说到怎么注销或删除token,只有一个刷新refresh和拉黑invalidate,我看了一下它的代码,刷新方法中会调用拉黑方法,看到这个注释,让我激动了一下,鸡儿!原来拉黑就是注销
![](https://img.kancloud.cn/ba/44/ba443fc8798c307298bfb0237fd87079_768x313.png)
这个拉黑的具体操作就是把你要注销的token保存在本地的cookie中,默认的保存时间是14天,14天后cookie会自己删除的,你可以在根目录下的runtime目录下的cache目录中找到对应的文件,我就不测试这个方法了,我感觉这个操作好像没什么必要。
文件内容形似这样
![](https://img.kancloud.cn/ba/44/ba443fc8798c307298bfb0237fd87079_768x313.png)
至此token这节就结束了。
什么?
你想改默认的token名称?那你可得好好研究这个插件了,看看怎么改,改完了记得踢我一脚,让我也看看,虽然我觉得一个Authorization已经够用了。
![](https://img.kancloud.cn/87/f3/87f378f1d8e840fd7cc6778ec6f4fb16_1044x847.png)
现在再来回头看看我们之前写的检查jwt的中间件,把返回的结果封装一下
![](https://img.kancloud.cn/8b/0c/8b0ce90260e976947139d6f0e95bd053_979x624.png)
*app/middleware/CheckToken.php*
```
<?php
namespace app\middleware;
use thans\jwt\facade\JWTAuth;
use thans\jwt\exception\JWTException;
class CheckToken
{
public function handle($request, \Closure $next)
{
// OPTIONS请求直接返回
if ($request->isOptions()) {
return response();
}
try {
JWTAuth::auth();
}catch (JWTException $e) {
return result(null, $e->getMessage(), 401);
}
return $next($request);
}
}
```
- 空白目录
- 使用thinkphp6搭建后端api接口流程
- tp6 uniapp vue 前后端跨域解决方案
- 操作记录
- api00
- 你看看有没有用
- 6666
- Docker安装LNMP环境的详细过程(可部署TP项目)
- LNMP部署thinkphp
- 玩客云Armbian 安装LNMP环境 Docker
- ThinkPHP6项目基操(16.实战部分 redis+token登录)
- ThinkPHP6项目基操(11.实战部分 部署后台静态页面模板及后台登录页面)
- ThinkPHP6项目基操(13.实战部分 项目中的自定义异常处理总结 错误页面API错误)
- ThinkPHP6项目基操(14.实战部分 中间件处理登录流程)
- ThinkPHP6项目基操(12.实战部分 验证码)
- ThinkPHP6项目基操(18.实战部分 表单令牌Token 防CSRF)
- ThinkPHP6项目基操(19.实战部分 Mysql模型事务操作)
- ThinkPHP6项目基操(20.实战部分 数据库操作返回值总结)
- 浏览器端判断当前设备的运行环境
- api
- api异常捕捉
- 写一个中间件
- 统一的参数返回形式
- ThinkPHP6调用模型的方法
- thinkphp6控制器、验证器、模型、service,各层写的内容