markdown格式wiki文档

JWTUtils.php 1.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <?php
  2. declare(strict_types=1);
  3. namespace app\utils;
  4. use \Firebase\JWT\JWT;
  5. /**
  6. * PHP实现jwt
  7. */
  8. class JWTUtils extends JWT
  9. {
  10. //使用HMAC生成信息摘要时所使用的密钥
  11. private static $key = 'bf731bcb3f5e52ec1b8b12c95f503d7a';
  12. /**
  13. * 获取jwt token
  14. * @param array $payload jwt载荷 格式如下非必须
  15. * [
  16. * 'iss'=>'jwt_admin', //该JWT的签发者
  17. * 'iat'=>time(), //签发时间
  18. * 'exp'=>time()+7200, //过期时间
  19. * 'nbf'=>time()+60, //该时间之前不接收处理该Token
  20. * 'sub'=>'www.admin.com', //面向的用户
  21. * 'jti'=>md5(uniqid('JWT').time()) //该Token唯一标识
  22. * ]
  23. * @return bool|string
  24. */
  25. public static function getToken(array $payload)
  26. {
  27. if (is_array($payload)) {
  28. $token = self::encode($payload, self::$key);
  29. return $token;
  30. } else {
  31. return false;
  32. }
  33. }
  34. /**
  35. * 验证token是否有效,默认验证exp,nbf,iat时间
  36. * @param string $Token 需要验证的token
  37. * @return bool|string
  38. */
  39. public static function verifyToken(string $Token)
  40. {
  41. try {
  42. self::$leeway = 60;
  43. $decoded = self::decode($Token, self::$key, ['HS256']);
  44. $arr = (array)$decoded;
  45. if ($arr['exp'] < time()) {
  46. throw new RRException("认证信息已过期, 请重新登录.", 401);
  47. }
  48. return true;
  49. } catch(\Exception $e) {
  50. throw new RRException($e->getMessage(), 401);
  51. }
  52. }
  53. }