lanffff 6年前

修改理由:

同仁反馈

此投稿已在 6年前 合并。

内容修改:

红色背景 为原始内容

绿色背景 为新增或者修改的内容

OldNewDifferences
6767               return true;
6868       }
6969       ```
70 如果验证无误就会返回true。
 70如果验证无误就会返回true。
 71 8.关于token不存在及token过期的问题处理(补充)
 72    在 vendor\think-api\src\JWT/Factories\code.php 文件中think-api接口为咱们提供了对应的错误反馈。
 73    ```
 74     // 检查是否过期
 75       if (isset($payload->exp) && (time() - $this->deviation) >= $payload->exp) {
 76           throw new TokenExpiredException('该 Token 已过期');
 77       }
 78       // 验证签名
 79           if (!$this->verify("$header64.$payload64", $signature)) {
 80             throw new TokenInvalidException('无效的 Token');
 81           }
 82    ```
 83那么咱们如何利用这些状态反馈呢,这就要使用前置中间件的方式来对前端发送的token信息进行验证。
 84  首先创建中间件:
 85        `php think make:middle Test `
 86   然后在中间件中写入以下内容:
 87    ```
 88    //用try catch捕获报错反馈
 89        public function handle($request, Closure $next)
 90   {
 91       try {
 92           if (! $user = JWT::authenticate()) { 
 93               return response()->json([
 94                   'errcode' => 1004,
 95                   'errmsg' => '无此用户'
 96
 97               ], 404);
 98           }
 99       return $next($request);
 100
 101   } catch (TokenExpiredException $e) {
 102
 103           return response()->json([
 104               'errcode' => 1003,
 105               'errmsg' => 'token 过期' , //token已过期
 106           ]);
 107
 108       } catch (TokenInvalidException $e) {
 109
 110           return response()->json([
 111               'errcode' => 1002,
 112               'errmsg' => 'token 无效', //token无效
 113           ]);
 114
 115       } catch (JWTException $e) {
 116
 117           return response()->json([
 118               'errcode' => 1001,
 119               'errmsg' => '缺少token' , //token为空
 120           ]);
 121
 122       }
 123   }
 124     ```
 125     
 126之后再在路由上门引用就可以了。