ManageAuthService.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <?php
  2. /**
  3. * 认证服务.
  4. *
  5. * @author nj
  6. * @date 2021-01-22 11:36:11
  7. */
  8. namespace Modules\ManageApi\Services;
  9. use App\Constants\CommonConstant;
  10. use App\Constants\ManageConstant;
  11. use App\Repositories\Utils\JwtRepository;
  12. use Psr\SimpleCache\CacheInterface;
  13. use Cache;
  14. use Str;
  15. class ManageAuthService
  16. {
  17. /**
  18. * Jwt受众.
  19. *
  20. * @var string
  21. */
  22. private $jwtAud = 'manage-users';
  23. /**
  24. * 获取存储用户设备Token的缓存Key.
  25. * @param string $managerUid
  26. * @return string
  27. */
  28. public function getManagerCacheKey($managerUid)
  29. {
  30. $cacheKey = 'manager_auth_'. $managerUid;
  31. return $cacheKey;
  32. }
  33. /**
  34. * 创建单点Jwt.
  35. * @param string $managerUid 管理员UID
  36. * @param int $roleId 角色ID
  37. * @return array
  38. * @throws \Psr\SimpleCache\InvalidArgumentException
  39. */
  40. public function createSingleJwt($managerUid, $roleId)
  41. {
  42. $manager = new \stdClass();
  43. $manager->manager_uid = $managerUid;
  44. $manager->role_id = $roleId;
  45. /**
  46. * @var JwtRepository $jwtRepository
  47. */
  48. $jwtRepository = make(JwtRepository::class);
  49. $tokenInfo = $jwtRepository->createManageJwt($manager);
  50. $token = $tokenInfo['token'];
  51. $cacheKey = $this->getManagerCacheKey($managerUid);
  52. /**
  53. * @var Cache $cache
  54. */
  55. $cache = make('cache');
  56. $cacheToken = $cache->has($cacheKey) ? $cache->get($cacheKey) : '';
  57. if (!empty($cacheToken)) {
  58. $cache->delete($cacheKey);
  59. }
  60. $cache->set($cacheKey, $token, config('jwt.ttl') * 60);
  61. return $tokenInfo;
  62. }
  63. /**
  64. * 获取头部Token.
  65. * @return mixed
  66. */
  67. public function getHeaderToken()
  68. {
  69. $token = request()->header(ManageConstant::MG_TOKEN_NAME, null);
  70. if (empty($token)) {
  71. // 支持GET/PUT获取token
  72. $token = request()->input(ManageConstant::MG_TOKEN_NAME, null);
  73. }
  74. return $token;
  75. }
  76. /**
  77. * 获取Token中的ManagerInfo
  78. * @return array 返回manager_uid, role_id
  79. */
  80. public function getManagerInfo()
  81. {
  82. $managerInfo = [];
  83. $token = $this->getHeaderToken();
  84. if (!empty($token)) {
  85. /**
  86. * @var JwtRepository $jwtRepository
  87. */
  88. $jwtRepository = make(JwtRepository::class);
  89. $validateResult = $jwtRepository->validateToken($token, $this->jwtAud);
  90. if ($validateResult['is_valid']) {
  91. $claim = $validateResult['token_obj']->claims();
  92. $managerInfo = [
  93. 'manager_uid' => !empty($claim->get('manager_uid')) ? $claim->get('manager_uid') : '',
  94. 'role_id' => !empty($claim->get('role_id')) ? $claim->get('role_id') : 0,
  95. ];
  96. }
  97. }
  98. return $managerInfo;
  99. }
  100. }