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
ファイルを開き、次の構成項目を追加します:
<?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 ], ];
3. JWT トークンの生成と解析
まず、JWT トークンを生成する必要があります。 HyperfJwtJwt
クラスをコントローラーに導入し、make()
メソッドを通じてトークンを生成します。サンプル コードは次のとおりです。
<?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 トークンを検証し、ユーザー情報を解析する必要があります。 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); } }
4. 認証にミドルウェアを使用する
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
には認証インターフェイスが必要です。このインターフェイスは、有効な JWT トークンを保持している場合にのみ正常にアクセスできます。
結論:
この記事では、JWT 認証に Hyperf フレームワークを使用する方法を紹介し、関連する構成とコードの例を示します。 JWT 認証により、Hyperf フレームワークでより高いセキュリティとユーザー認証機能を実現できます。この記事が、JWT 認証に Hyperf フレームワークを使用する際のお役に立てれば幸いです。
以上がJWT 認証に Hyperf フレームワークを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。