l1n6yun / hyperf-jwt
The Hyperf JWT package.
v3.1.3
2024-07-31 08:20 UTC
Requires
- php: >=8.1
- ext-openssl: *
- hyperf/cache: ~3.1.0
- hyperf/command: ~3.1.0
- hyperf/exception-handler: ~3.1.0
- hyperf/framework: ~3.1.0
- hyperf/utils: ~3.1.0
- lcobucci/jwt: ~5.3.0
- psr/http-message: ^1.0 || ^2.0
- symfony/clock: ~6.4.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- mockery/mockery: ^1.0
- phpstan/phpstan: ^1.0
- phpunit/phpunit: >=7.0
- swoole/ide-helper: ^4.5
Suggests
- swow/swow: Required to create swow components.
This package is auto-updated.
Last update: 2024-10-31 00:29:03 UTC
README
安装
composer require l1n6yun/hyperf-jwt
发布配置
php bin/hyperf.php vendor:publish l1n6yun/hyperf-jwt
文件位于
config/autoload/jwt.php
。
配置
<?php declare(strict_types=1); use function Hyperf\Support\env; return [ 'algo' => env('JWT_ALGO', 'HS256'), 'secret' => env('JWT_SECRET'), 'ttl' => env('JWT_TTL', 86400), 'leeway' => env('JWT_LEEWAY', 0), 'keys' => [ 'public' => env('JWT_PUBLIC_KEY'), 'private' => env('JWT_PRIVATE_KEY'), 'passphrase' => env('JWT_PASSPHRASE'), ], 'provider' => 'user', 'providers' => [ 'user' => \App\Models\UserModel::class, // 需实现 JwtSubjectInterface 接口 ], ];
生成秘钥
php bin/hyperf.php gen:jwt-secret
#php bin/hyperf.php gen:jwt-public-key
使用
use L1n6yun\HyperfJwt\Contracts\JwtSubjectInterface; use function L1n6yun\HyperfJwt\auth; // 模型实现了 JwtSubjectInterface 接口 class UserModel implements JwtSubjectInterface{ public function getJwtIdentifier(){ return (string)$this->id; }; public static function retrieveById($key){ return self::findFromCache($key); }; } // 生成token $userInfo = UserModel::query()->first(); auth()->login($userInfo) // 退出登陆 auth()->logout(); // 获取载荷 auth()->getPayload(); // 获取用户信息 auth()->user(); // 刷新token auth()->refresh(); // 检测登陆返回用户ID auth()->check();
使用注解进行权限验证,注解适用于类和方法
<?php namespace App\Controller; use L1n6yun\HyperfJwt\Annotation\Auth; #[Auth] // 全局注解,所有方法都需要验证 class TestController extends AbstractController { #[Auth] // 方法注解,该方法需要验证 public function userInfo(){ } }
异常助理
使用 L1n6yun\HyperfJwt\Exceptions\Handlers\AuthExceptionHandler
,此步骤可选,开发者可以自行捕捉 AuthException
和 UnauthorizedException
进行处理
# config/autoload/exceptions.php use L1n6yun\HyperfJwt\Exceptions\Handlers\AuthExceptionHandler return [ 'handler' => [ 'http' => [ AuthExceptionHandler::class, ], ], ];