TokenService.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. namespace App\Service;
  3. use Firebase\JWT\JWT;
  4. use Firebase\JWT\Key;
  5. class TokenService
  6. {
  7. const key = "t_nine"; //签发人 可空
  8. const validity = 8640000; //有效期
  9. const error = [
  10. -1 => "签名不正确",
  11. -2 => "签名在某个时间点之后才能用",
  12. -3 => "签名过期,重新登录",
  13. -4 => "未知错误"
  14. ];
  15. /**
  16. * Created by PhpStorm.
  17. * User: Administrator
  18. * Date: 2023/3/13
  19. * Time: 16:43
  20. * 获取token(登录以后)
  21. */
  22. public static function getToken($userId) :string{
  23. $token = array(
  24. "iat"=> time(), //签发时间
  25. "nbf"=> time() - 1, //生效时间 (立即生效)
  26. "exp"=> time() + self::validity,
  27. "data"=> [
  28. 'user_id' => $userId
  29. ]
  30. );
  31. return JWT::encode($token,self::key,"HS256");
  32. }
  33. /**
  34. * Created by PhpStorm.
  35. * User: Administrator
  36. * Date: 2023/3/13
  37. * Time: 16:52
  38. * 解密token
  39. */
  40. public static function verifyToken($token){
  41. try {
  42. JWT::$leeway = 60;//当前时间减去60,把时间留点余地,同步其他服务器时间,解决nbf字段验证不通过问题
  43. $decoded = JWT::decode($token,new Key(self::key, "HS256")); //HS256方式,这里要和签发的时候对应
  44. $arr = (array)$decoded;
  45. return $arr['data']->user_id;
  46. } catch (\Firebase\JWT\SignatureInvalidException $e) { //签名不正确
  47. return -1;
  48. } catch (\Firebase\JWT\BeforeValidException $e) { // 签名在某个时间点之后才能用
  49. return -2;
  50. } catch (\Firebase\JWT\ExpiredException $e) { // token过期
  51. return -3;
  52. } catch (\Exception $e) { //其他错误
  53. return -4;
  54. }
  55. }
  56. }