JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用中安全传输令牌。它广泛应用于用户身份认证和权限管理。ThinkPHP6作为一款流行的PHP框架,提供了丰富的组件支持,方便开发者集成JWT认证功能。本文将逐步讲解如何在ThinkPHP6中实现JWT认证。
首先,需要通过Composer安装JWT相关的扩展库。进入项目根目录,在终端执行以下命令:
<span class="fun">composer require firebase/php-jwt</span>
安装完成后,在ThinkPHP6的配置目录下新建或修改 jwt.php 文件,配置如下内容:
return [
'secret' => 'your_secret_key',
'algorithm' => 'HS256',
];
其中,secret 是用于签名的密钥,建议设置为随机字符串,algorithm 是加密算法,可选HS256、HS384或HS512。
认证中间件用于在请求到达控制器前验证JWT令牌。使用命令快速生成中间件:
<span class="fun">php think make:middleware JwtMiddleware</span>
该命令会在 app/middleware 目录下生成 JwtMiddleware 类文件。
打开 JwtMiddleware 文件,补充身份验证代码:
use think\facade\Request;
use think\facade\Response;
use Firebase\JWT\JWT;
class JwtMiddleware
{
public function handle($request, \Closure $next)
{
$token = Request::header('Authorization');
if (empty($token)) {
return Response::create('Unauthorized', '401');
}
try {
JWT::decode($token, config('jwt.secret'), [config('jwt.algorithm')]);
} catch (\Exception $e) {
return Response::create('Invalid token', '401');
}
return $next($request);
}
}
代码中,首先从请求头获取JWT令牌,若为空则返回401错误;随后验证令牌合法性,若失败同样返回401;验证通过后,继续执行后续请求。
在 route/route.php 中,将需要认证的路由添加中间件:
\think\Route::group(function () {
// 需要认证的路由
})->middleware(\app\middleware\JwtMiddleware::class);
也可以在控制器类注解中声明中间件:
namespace app\controller;
use think\annotation\route\Post;
use app\middleware\JwtMiddleware;
/**
* @route("auth")
* @middleware(JwtMiddleware::class)
*/
class AuthController
{
// 控制器代码
}
这样控制器内所有路由都会自动通过JWT认证中间件。
完成配置后,使用Postman或其他接口测试工具发送带有有效JWT令牌的请求,验证接口是否正常响应。无效或缺失令牌时,应返回401未授权错误。
本文介绍了如何在ThinkPHP6框架中集成JWT认证。涵盖了扩展安装、配置、认证中间件创建与应用,以及接口测试的完整流程。通过实现JWT认证,能够提升应用的安全性,实现高效的用户身份管理。