| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- <?php
- /**
- * 认证服务.
- *
- * @author nj
- * @date 2021-01-22 11:36:11
- */
- namespace Modules\ManageApi\Services;
- use App\Constants\ManageConstant;
- use App\Repositories\Utils\JwtRepository;
- use Cache;
- use Str;
- class ManageAuthService
- {
- /**
- * Jwt受众.
- *
- * @var string
- */
- private $jwtAud = 'manage-users';
- /**
- * 获取存储用户设备Token的缓存Key.
- * @param string $managerUid
- * @return string
- */
- public function getManagerCacheKey($managerUid)
- {
- $cacheKey = 'manager_auth_'. $managerUid;
- return $cacheKey;
- }
- /**
- * 创建单点Jwt.
- * @param string $managerUid 管理员UID
- * @param int $roleId 角色ID
- * @return array
- * @throws \Psr\SimpleCache\InvalidArgumentException
- */
- public function createSingleJwt($managerUid, $roleId)
- {
- $manager = new \stdClass();
- $manager->manager_uid = $managerUid;
- $manager->role_id = $roleId;
- /**
- * @var JwtRepository $jwtRepository
- */
- $jwtRepository = make(JwtRepository::class);
- $tokenInfo = $jwtRepository->createManageJwt($manager);
- $token = $tokenInfo['token'];
- $cacheKey = $this->getManagerCacheKey($managerUid);
- /**
- * @var Cache $cache
- */
- $cache = make('cache');
- $cacheToken = $cache->has($cacheKey) ? $cache->get($cacheKey) : '';
- if (!empty($cacheToken)) {
- $cache->delete($cacheKey);
- }
- $cache->set($cacheKey, $token, config('jwt.ttl') * 60);
- return $tokenInfo;
- }
- /**
- * 获取头部Token.
- * @return mixed
- */
- public function getHeaderToken()
- {
- $token = request()->header(ManageConstant::MG_TOKEN_NAME, null);
- if (empty($token)) {
- // 支持GET/PUT获取token
- $token = request()->input(ManageConstant::MG_TOKEN_NAME, null);
- }
- return $token;
- }
- /**
- * 获取Token中的ManagerInfo
- * @return array 返回manager_uid, role_id
- */
- public function getManagerInfo()
- {
- $managerInfo = [];
- $token = $this->getHeaderToken();
- if (!empty($token)) {
- /**
- * @var JwtRepository $jwtRepository
- */
- $jwtRepository = make(JwtRepository::class);
- $validateResult = $jwtRepository->validateToken($token, $this->jwtAud);
- if ($validateResult['is_valid']) {
- $claim = $validateResult['token_obj']->claims();
- $managerInfo = [
- 'manager_uid' => !empty($claim->get('manager_uid')) ? $claim->get('manager_uid') : '',
- 'role_id' => !empty($claim->get('role_id')) ? $claim->get('role_id') : 0,
- ];
- }
- }
- return $managerInfo;
- }
- }
|