TokenService.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. <?php
  2. namespace App\Service;
  3. use Firebase\JWT\JWT;
  4. use Firebase\JWT\Key;
  5. class TokenService
  6. {
  7. public static function getToken($user) {
  8. $key = config('jwt.key');
  9. $ttl = config('jwt.ttl');
  10. if(empty($key)) return [false, 'JWT_KEY暂未配置'];
  11. $token = array(
  12. "iat"=> time(), //签发时间
  13. "nbf"=> time() - 1, //生效时间 (立即生效)
  14. "exp"=> time() + $ttl,
  15. "data"=> [
  16. 'employee_id' => $user['id'],
  17. 'p_version' => $user['p_version']
  18. ]
  19. );
  20. return [true, JWT::encode($token, $key,"HS256")];
  21. }
  22. public static function verifyToken($token){
  23. try {
  24. $key = config('jwt.key');
  25. if(empty($key)) return [false, 'JWT_KEY暂未配置'];
  26. JWT::$leeway = 60;//当前时间减去60,把时间留点余地,同步其他服务器时间,解决nbf字段验证不通过问题
  27. $decoded = JWT::decode($token,new Key($key, "HS256")); //HS256方式,这里要和签发的时候对应
  28. $employee = (array)$decoded->data;
  29. return [true, $employee];
  30. } catch (\Firebase\JWT\SignatureInvalidException $e) { //签名不正确
  31. return [false, "签名不正确"];
  32. } catch (\Firebase\JWT\BeforeValidException $e) { // 签名在某个时间点之后才能用
  33. return [false, "签名在某个时间点之后才能用"];
  34. } catch (\Firebase\JWT\ExpiredException $e) { // token过期
  35. return [false, "签名过期"];
  36. } catch (\Exception $e) { //其他错误
  37. return [false, "未知错误"];
  38. }
  39. }
  40. }