JWT 인증을 위해 Hyperf 프레임워크를 사용하는 방법
소개:
Hyperf는 Swoole 기반의 고성능 코루틴 프레임워크로, 풍부한 기능과 유연한 확장성을 제공합니다. JWT(JSON Web Token)는 정보를 인증하고 전송하기 위한 개방형 표준입니다. 이 기사에서는 Hyperf 프레임워크에서 JWT 인증을 사용하는 방법을 소개하고 구체적인 코드 예제를 제공합니다.
1. 종속성 패키지 설치
먼저 hyperf/jwt 및 lcobucci/jwt 종속성 패키지를 설치해야 합니다. Composer를 통해 설치할 수 있으며 터미널을 열고 다음 명령을 실행합니다.
composer require hyperf/jwt lcobucci/jwt
2. 인증 정보 구성
Hyperf 프레임워크에서는 JWT 인증에 필요한 관련 정보를 구성해야 합니다. config/autoload/jwt.php
파일을 열고 다음 구성 항목을 추가합니다. config/autoload/jwt.php
文件,添加如下配置项:
<?php return [ 'default' => [ 'valid_seconds' => env('JWT_VALID_SECONDS', 3600), // Token有效期 'secret' => env('JWT_SECRET', 'your-secret-key'), // 对称加密密钥 'refresh_ttl' => env('JWT_REFRESH_TTL', 20160), // Token刷新有效期 'password_key' => env('JWT_PASSWORD_KEY', 'password'), // 密码字段名称 'blacklist_enabled' => env('JWT_BLACKLIST_ENABLED', true), // Token黑名单启用 'blacklist_grace_period' => env('JWT_BLACKLIST_GRACE_PERIOD', 60), // Token宽限期 'claim' => [], // 自定义Claims ], ];
三、生成和解析JWT Token
首先,我们需要生成JWT Token。在控制器中引入HyperfJwtJwt
类,并通过make()
方法生成Token。示例代码如下:
<?php declare(strict_types=1); namespace AppController; use HyperfDiAnnotationInject; use PsrHttpMessageResponseInterface; class AuthController extends AbstractController { /** * @Inject * @var HyperfJwtJwt */ private $jwt; public function login(): ResponseInterface { // 对用户进行验证,验证通过后生成Token $userId = 1; $token = $this->jwt->make(['user_id' => $userId]); return $this->response->json([ 'token' => $token->toString(), 'expires_at' => $token->getClaim('exp'), ]); } }
接下来,我们需要在中间件中验证JWT Token并解析出用户信息。在中间件中引入HyperfJwtMiddlewareJwtMiddleware
类,并使用handle()
方法进行验证和解析。示例代码如下:
<?php declare(strict_types=1); namespace AppMiddleware; use HyperfDiAnnotationInject; use HyperfHttpServerContractRequestInterface; use HyperfHttpServerContractResponseInterface as HttpResponse; use HyperfUtilsContext; use HyperfUtilsStr; use HyperfJwtExceptionTokenValidException; use HyperfJwtJwtInterface; use PsrContainerContainerInterface; class JwtMiddleware { /** * @Inject * @var HyperfJwtJwt */ private $jwt; /** * @var JwtInterface */ private $jwtFactory; /** * @var RequestInterface */ private $request; /** * @var HttpResponse */ private $response; public function __construct(ContainerInterface $container, JwtInterface $jwt, RequestInterface $request, HttpResponse $response) { $this->jwtFactory = $jwt; $this->request = $request; $this->response = $response; } public function handle($request, Closure $next) { $token = Str::replaceFirst('Bearer ', '', $this->request->header('Authorization')); // 从Header中获取Token if (empty($token)) { throw new TokenValidException('Token not provided'); } try { $token = $this->jwtFactory->parse($token); // 解析Token $claims = $token->claims(); // 获取Token中的声明 Context::set('user_id', $claims->get('user_id')); // 设置用户ID到上下文 } catch (TokenValidException $e) { throw new TokenValidException('Invalid token', $e->getCode(), $e); } return $next($request); } }
四、使用中间件进行认证
在路由中使用中间件进行JWT认证。打开config/routes.php
文件,添加如下路由和中间件配置项:
<?php use AppMiddlewareJwtMiddleware; Router::addGroup('/api', function () { Router::post('/login', 'AppControllerAuthController@login'); // 需要认证的路由 Router::addGroup('/auth', function () { Router::get('/info', 'AppControllerAuthController@info'); }, ['middleware' => [JwtMiddleware::class]]); });
在上面的示例中,AppControllerAuthController@info
rrreee
먼저 JWT 토큰을 생성해야 합니다. HyperfJwtJwt
클래스를 컨트롤러에 도입하고 make()
메서드를 통해 토큰을 생성합니다. 샘플 코드는 다음과 같습니다.
rrreee
HyperfJwtMiddlewareJwtMiddleware
클래스를 미들웨어에 도입하고 handle()
메서드를 사용하여 확인 및 파싱을 수행합니다. 샘플 코드는 다음과 같습니다. 🎜rrreee🎜 4. 인증을 위해 미들웨어를 사용합니다. 🎜 JWT 인증을 위해 라우팅에 미들웨어를 사용합니다. config/routes.php
파일을 열고 다음 라우팅 및 미들웨어 구성 항목을 추가합니다. 🎜rrreee🎜위 예에서 AppControllerAuthController@info
는 인증이 필요한 인터페이스입니다. 이 인터페이스는 유효한 JWT 토큰을 가지고 있는 경우에만 성공적으로 액세스할 수 있습니다. 🎜🎜결론: 🎜이 문서에서는 JWT 인증을 위해 Hyperf 프레임워크를 사용하는 방법을 소개하고 관련 구성 및 코드 예제를 제공합니다. JWT 인증을 통해 Hyperf 프레임워크에서 더 높은 보안 및 사용자 확인 기능을 달성할 수 있습니다. JWT 인증을 위해 Hyperf 프레임워크를 사용할 때 이 기사가 도움이 되기를 바랍니다. 🎜위 내용은 JWT 인증을 위해 Hyperf 프레임워크를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!