key; $time = time(); //当前时间 $token = [ "iss" => '', //签发者 可选 "aud" => '', //接收该JWT的一方,可选 "iat" => $time, //签发时间 "nbf" => $time, //(Not Before):某个时间点后才能访问,比如设置time+30,表示当前时间30秒后才能使用 "exp" => $time + $time_out, //token 过期时间 "data" => $info //自定义信息,不要定义敏感信息 ]; $jwt = \Firebase\JWT\JWT::encode($token, $key); //输出Token $token['token'] = $jwt; return $token; } /** * 验证Token * @param string $token Token * @date 2020-09-03 */ public function checkToken($token) { $key = $this->key; try { \Firebase\JWT\JWT::$leeway = 60; //当前时间减去60,把时间留点余地 $decoded = \Firebase\JWT\JWT::decode($token, $key, ['HS256']); //HS256方式,这里要和签发的时候对应 $arr = objectToArray($decoded); return ['code' => 0, 'data' => $arr, 'msg' => '']; } catch (\Firebase\JWT\SignatureInvalidException $e) { //签名不正确 return ['code' => -1, 'data' => [], 'msg' => $e->getMessage()]; } catch (\Firebase\JWT\BeforeValidException $e) { // 签名在某个时间点之后才能用 return ['code' => -2, 'data' => [], 'msg' => $e->getMessage()]; } catch (\Firebase\JWT\ExpiredException $e) { // token过期 return ['code' => -3, 'data' => [], 'msg' => $e->getMessage()]; } catch (\Exception $e) { //其他错误 return ['code' => -4, 'data' => [], 'msg' => $e->getMessage()]; } //Firebase定义了多个 throw new,我们可以捕获多个catch来定义问题,catch加入自己的业务,比如token过期可以用当前Token刷新一个新Token } }