🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
在根目录下的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); } } ```