|
|
@ -1,10 +1,10 @@ |
|
|
<?php |
|
|
<?php |
|
|
namespace app\api\service; |
|
|
namespace app\api\service; |
|
|
|
|
|
|
|
|
use Lcobucci\JWT\Parser; |
|
|
use Lcobucci\JWT\Builder; |
|
|
use Lcobucci\JWT\Signer\Hmac\Sha256; |
|
|
use Lcobucci\JWT\Signer\Hmac\Sha256; |
|
|
use Lcobucci\JWT\Token; |
|
|
|
|
|
use Lcobucci\JWT\Signer\Key\InMemory; |
|
|
use Lcobucci\JWT\Signer\Key\InMemory; |
|
|
|
|
|
use Lcobucci\JWT\Token; |
|
|
|
|
|
|
|
|
class JWTService |
|
|
class JWTService |
|
|
{ |
|
|
{ |
|
|
@ -20,19 +20,26 @@ class JWTService |
|
|
$signer = new Sha256(); |
|
|
$signer = new Sha256(); |
|
|
$key = InMemory::plainText($this->secret); |
|
|
$key = InMemory::plainText($this->secret); |
|
|
|
|
|
|
|
|
$token = (new Token())->withClaim('id', $claims['id'])->withClaim('username', $claims['username']); |
|
|
$token = (new Builder())->issuedNow()->canOnlyBeUsedAfter(0)->expiresAt(time() + config('jwt.token_ttl')); |
|
|
$token = $token->withExpiresAt(time() + config('jwt.token_ttl')); |
|
|
|
|
|
|
|
|
foreach ($claims as $key => $value) { |
|
|
|
|
|
$token = $token->withClaim($key, $value); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
return (string) $token->sign($signer, $key); |
|
|
return (string) $token->sign($signer, $key); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
public function verifyToken(string $token): array |
|
|
public function verifyToken(string $token): array |
|
|
{ |
|
|
{ |
|
|
$parser = new Parser(); |
|
|
try { |
|
|
$token = $parser->parse((string) $token); |
|
|
$parser = new \Lcobucci\JWT\Parser(); |
|
|
|
|
|
$token = $parser->parse($token); |
|
|
if ($token->verify(new Sha256(), InMemory::plainText($this->secret))) { |
|
|
|
|
|
return $token->getClaims(); |
|
|
if ($token->verify(new Sha256(), InMemory::plainText($this->secret))) { |
|
|
|
|
|
return $token->getClaims(); |
|
|
|
|
|
} |
|
|
|
|
|
} catch (\Exception $e) { |
|
|
|
|
|
// Handle exception |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return []; |
|
|
return []; |
|
|
|