Comment utiliser le framework Hyperf pour l'authentification JWT
Introduction :
Hyperf est un framework de coroutine hautes performances basé sur Swoole, offrant des fonctions riches et une évolutivité flexible. JWT (JSON Web Token) est un standard ouvert d'authentification et de transmission d'informations. Dans cet article, nous présenterons comment utiliser l'authentification JWT dans le framework Hyperf et fournirons des exemples de code spécifiques.
1. Installer les packages de dépendances
Tout d'abord, nous devons installer les packages de dépendances hyperf/jwt et lcobucci/jwt. Il peut être installé via Composer, ouvrez le terminal et exécutez la commande suivante :
composer require hyperf/jwt lcobucci/jwt
2. Configurez les informations d'authentification
Dans le framework Hyperf, nous devons configurer les informations pertinentes requises pour l'authentification JWT. Ouvrez le fichier config/autoload/jwt.php
et ajoutez les éléments de configuration suivants : 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
Tout d'abord, nous devons générer le jeton JWT. Introduisez la classe HyperfJwtJwt
dans le contrôleur et générez un jeton via la méthode make()
. L'exemple de code est le suivant :
rrreee
HyperfJwtMiddlewareJwtMiddleware
dans le middleware et utilisez la méthode handle()
pour la vérification et l'analyse. L'exemple de code est le suivant : 🎜rrreee🎜 4. Utilisez un middleware pour l'authentification 🎜 Utilisez un middleware dans le routage pour l'authentification JWT. Ouvrez le fichier config/routes.php
et ajoutez les éléments de configuration de routage et de middleware suivants : 🎜rrreee🎜Dans l'exemple ci-dessus, AppControllerAuthController@info
est l'interface qui nécessite une authentification. Cette interface n'est accessible avec succès que si vous transportez un jeton JWT valide. 🎜🎜Conclusion : 🎜Cet article explique comment utiliser le framework Hyperf pour l'authentification JWT et fournit des exemples de configuration et de code pertinents. Grâce à l'authentification JWT, nous pouvons obtenir des fonctions de sécurité et de vérification des utilisateurs plus élevées dans le framework Hyperf. J'espère que cet article vous sera utile lors de l'utilisation du framework Hyperf pour l'authentification JWT. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!