引言:
hyperf是一款基于swoole的高性能协程框架,提供了丰富的功能和灵活的扩展性。jwt(json web token)是一种用于认证和传输信息的开放标准。在本文中,我们将介绍如何在hyperf框架中使用jwt认证,并提供具体的代码示例。
一、安装依赖包
首先,我们需要安装hyperf/jwt和lcobucci/jwt依赖包。可以通过composer进行安装,打开终端运行以下命令:
composer require hyperf/jwt lcobucci/jwt
二、配置认证信息
在hyperf框架中,我们需要配置jwt认证所需的相关信息。打开config/autoload/jwt.php文件,添加如下配置项:
<?phpreturn [ '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。示例代码如下:
<?phpdeclare(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()方法进行验证和解析。示例代码如下:
<?phpdeclare(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文件,添加如下路由和中间件配置项:
<?phpuse 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 token时,才能成功访问该接口。
结论:
本文介绍了如何使用hyperf框架进行jwt认证,并提供了相关的配置和代码示例。通过jwt认证,我们可以在hyperf框架中实现较高的安全性和用户验证功能。希望本文对你在使用hyperf框架进行jwt认证有所帮助。
以上就是如何使用hyperf框架进行jwt认证的详细内容。
