当前位置: 首页> 最新文章列表> ThinkPHP6实现JWT认证详解,轻松掌握用户身份验证

ThinkPHP6实现JWT认证详解,轻松掌握用户身份验证

gitbox 2025-08-02

引言

JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用中安全传输令牌。它广泛应用于用户身份认证和权限管理。ThinkPHP6作为一款流行的PHP框架,提供了丰富的组件支持,方便开发者集成JWT认证功能。本文将逐步讲解如何在ThinkPHP6中实现JWT认证。

安装JWT扩展

使用Composer安装扩展库

首先,需要通过Composer安装JWT相关的扩展库。进入项目根目录,在终端执行以下命令:

<span class="fun">composer require firebase/php-jwt</span>

配置JWT参数

安装完成后,在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认证,能够提升应用的安全性,实现高效的用户身份管理。