当前位置: 首页> 最新文章列表> 在ThinkPHP6中实现JWT认证:完整教程与代码示例

在ThinkPHP6中实现JWT认证:完整教程与代码示例

gitbox 2025-06-18

1. 什么是JWT

JSON Web Token(JWT)是一种开放标准(RFC 7519),用于在网络上传输信息。JWT由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。头部包含令牌类型和签名算法,载荷保存需要传输的数据,签名则用来验证令牌的真实性。

2. JWT在ThinkPHP6中的使用

在ThinkPHP6中使用JWT,首先需要通过在composer.json文件中引入think-jwt组件来实现。在该文件的require节点添加"think-jwt": "1.0.*",然后执行composer update命令以安装该组件。

2.1 生成JWT

在ThinkPHP6中,可以通过JWT类来生成JWT。首先,需要创建一个jwt.php配置文件,该文件包含了JWT相关配置项。

        return [
            // 签名密钥
            'secret' => 'my_secret',
            // 过期时间,单位为秒,默认为1小时
            'expire' => 3600,
        ];
    

然后,在控制器中引入JWT类,并使用create方法来生成JWT。

        use think\jwt\JWT;

        class UserController extends Controller {
            public function login() {
                // 验证用户名和密码
                ...
                
                // 生成JWT
                $payload = [
                    'user_id' => $user->id
                ];
                $jwt = JWT::create($payload);
                
                return ['token' => $jwt];
            }
        }
    

上述代码中,首先验证用户名和密码,通过验证后生成JWT并返回给客户端。

2.2 验证JWT

在ThinkPHP6中,可以通过JWT类的verify方法来验证JWT的有效性。

        use think\jwt\JWT;

        class UserController extends Controller {
            public function profile() {
                // 验证JWT
                $jwt = input('token');
                $payload = JWT::verify($jwt);
                
                return ['user_id' => $payload['user_id']];
            }
        }
    

上述代码中,首先从客户端获取JWT,然后调用verify方法进行验证。验证通过后,可以获取JWT中的payload数据。

3. 总结

通过本文,我们了解了JWT的基本概念和在ThinkPHP6中的使用方法。使用JWT进行认证能够有效提高接口的安全性,防止未经授权的访问。在实际开发中,开发者可以根据需求调整JWT配置,满足项目的安全需求。