TokenService.php 1.9 KB

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