Maison> cadre php> Swoole> le corps du texte

Comment utiliser le framework Hyperf pour l'authentification

PHPz
Libérer: 2023-10-24 10:01:01
original
579 Les gens l'ont consulté

Comment utiliser le framework Hyperf pour lauthentification

Comment utiliser le framework Hyperf pour l'authentification

Dans les applications Web modernes, l'authentification des utilisateurs est une fonctionnalité très importante. Pour protéger les informations sensibles et garantir la sécurité des applications, l'authentification garantit que seuls les utilisateurs authentifiés peuvent accéder aux ressources restreintes.

Hyperf est un framework PHP hautes performances basé sur Swoole, qui fournit de nombreuses fonctions et outils modernes et efficaces. Dans le framework Hyperf, nous pouvons utiliser plusieurs méthodes pour implémenter l'authentification d'identité. Deux des méthodes couramment utilisées seront présentées ci-dessous.

  1. Utilisation de JWT (JSON Web Token)

JWT est un standard ouvert (RFC 7519) qui définit une méthode concise et autonome pour transmettre en toute sécurité des informations entre les parties communicantes. Dans le framework Hyperf, nous pouvons utiliser la bibliothèque d'extensionslcobucci/jwtpour réaliser la génération et la vérification JWT.lcobucci/jwt扩展库来实现JWT的生成和验证。

首先,我们需要在composer.json文件中添加lcobucci/jwt库的依赖项:

"require": { "lcobucci/jwt": "^3.4" }
Copier après la connexion

然后执行composer update命令安装依赖项。

接下来,我们可以创建一个JwtAuthenticator类,用于生成和验证JWT:

configuration = $configuration; } public function validateToken(string $token): bool { $parsedToken = $this->configuration->parser()->parse($token); $isVerified = $this->configuration->validator()->validate($parsedToken, ...$this->configuration->validationConstraints()); return $isVerified; } public function generateToken(Authenticatable $user): string { $builder = $this->configuration->createBuilder(); $builder->issuedBy('your_issuer') ->issuedAt(new DateTimeImmutable()) ->expiresAt((new DateTimeImmutable())->modify('+1 hour')) ->withClaim('sub', (string) $user->getAuthIdentifier()); $token = $builder->getToken($this->configuration->signer(), $this->configuration->signingKey()); return $token->toString(); } }
Copier après la connexion

然后,我们需要在Hyperf框架的容器中注册JwtAuthenticator类:

HyperfUtilsApplicationContext::getContainer()->define(AppAuthJwtAuthenticator::class, function (PsrContainerContainerInterface $container) { $configuration = LcobucciJWTConfiguration::forAsymmetricSigner( new LcobucciJWTSignerRsaSha256(), LcobucciJWTSignerKeyLocalFileReference::file('path/to/private/key.pem') ); return new AppAuthJwtAuthenticator($configuration); });
Copier après la connexion

最后,在需要认证的路由或控制器方法中,我们可以使用JwtAuthenticator类来验证用户的JWT:

authenticator = $authenticator; } /** * @RequestMapping(path="profile", methods="GET") */ public function profile() { $token = $this->request->getHeader('Authorization')[0] ?? ''; $token = str_replace('Bearer ', '', $token); if (!$this->authenticator->validateToken($token)) { // Token验证失败,返回错误响应 return 'Unauthorized'; } // Token验证成功,返回用户信息 return $this->authenticator->getUserByToken($token); } }
Copier après la connexion
  1. 使用Session

除了JWT认证,Hyperf框架也支持使用Session进行身份认证。我们可以通过配置文件来启用Session认证功能。

首先,我们需要在配置文件config/autoload/session.php中进行相应的配置,例如:

return [ 'handler' => [ 'class' => HyperfRedisSessionHandler::class, 'options' => [ 'pool' => 'default', ], ], ];
Copier après la connexion

然后,在需要认证的路由或控制器方法中,我们可以使用Hyperf框架提供的AuthManager类来验证用户的Session:

authManager = $authManager; } /** * @RequestMapping(path="profile", methods="GET") */ public function profile() { if (!$this->authManager->check()) { // 用户未登录,返回错误响应 return 'Unauthorized'; } // 用户已登录,返回用户信息 return $this->authManager->user(); } }
Copier après la connexion

在上述代码中,AuthManagerInterface

Tout d'abord, il faut ajouter les dépendances de la bibliothèque lcobucci/jwtdans le fichier composer.json :

rrreee

Ensuite, exécutez la commande composer updatepour installer les dépendances . Ensuite, nous pouvons créer une classe JwtAuthenticatorpour générer et valider JWT : rrreeeEnsuite, nous devons enregistrer la classe JwtAuthenticatordans le conteneur du framework Hyperf : rrreeeEnfin, dans une méthode de route ou de contrôleur qui nécessite une authentification, nous pouvons utiliser la classe JwtAuthenticatorpour vérifier le JWT de l'utilisateur : rrreee
    Use Session En plus de l'authentification JWT, le framework Hyperf prend également en charge l'utilisation de Session pour l'authentification d'identité. Nous pouvons activer la fonction d'authentification de session via le fichier de configuration. Tout d'abord, nous devons faire la configuration correspondante dans le fichier de configuration config/autoload/session.php, par exemple : rrreeeEnsuite, dans la méthode de route ou de contrôleur qui nécessite une authentification, nous pouvons utilisation La classe AuthManagerfournie par le framework Hyperf est utilisée pour vérifier la session de l'utilisateur : rrreeeDans le code ci-dessus, l'interface AuthManagerInterfacefournit de nombreuses méthodes d'authentification et d'opérations utilisateur , qui peut être Passer des appels en fonction des besoins réels. Ci-dessus sont deux méthodes courantes d'authentification d'identité à l'aide du framework Hyperf, en utilisant JWT ou Session pour implémenter l'authentification des utilisateurs. En fonction des besoins réels et des caractéristiques du projet, sélectionnez les méthodes appropriées pour garantir la sécurité des applications et l'expérience utilisateur. Dans le cadre du développement réel, vous pouvez en savoir plus sur l'utilisation avancée et les meilleures pratiques en vous basant sur la documentation et les exemples de code fournis par le framework.

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn