parse($token); static::checkJwt($jwt); return static::fromPayload($jwt->getPayload()); } /** * @return string */ public function getToken() { $jwtManager = static::jwtManager(); return $jwtManager->make($this->buildPayload(), static::matchHeaders())->token(); } /** * @return \Illuminate\Database\Eloquent\Model|static */ abstract public static function fromPayload(array $payload); /** * @throws TokenProviderException */ protected static function checkJwt(JWT $jwt) { $headers = $jwt->getHeaders(); foreach (static::matchHeaders() as $key => $header) { if (! isset($headers[$key]) || $headers[$key] !== $header) { throw new TokenProviderException('header invalid'); } } $payload = $jwt->getPayload(); $needPayloadsCount = count($needPayloads = static::needPayloads()); $intersectCount = count(array_intersect($needPayloads, array_keys($payload))); if ($needPayloadsCount !== $intersectCount) { throw new TokenProviderException('payload invalid'); } } /** * @return JWTManager */ protected static function jwtManager() { return app(JWTManager::class); } abstract protected static function matchHeaders(); abstract protected static function needPayloads(); }