ManageAuthService.php 2.8 KB

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