Symfony API Platform测试时无法创建签名JWT的问题求助
问题:PHPUnit测试JWT登录接口报错,外部调用正常
我在继承ApiTestCase的测试文件中编写了登录认证测试函数,代码如下:
class AuthenticationTest extends ApiTestCase { public function testLogin(): void { $client = self::createClient(); $container = self::getContainer(); $user = new User('username', [ 'ROLE_USER' ], 'e1420fb9-af64-4fb8-3c25-a0449b15fe7a'); $user->setPassword( $container->get('security.user_password_hasher')->hashPassword($user, 'T3ST') ); dump($user); $manager = $container->get('doctrine')->getManager(); $manager->persist($user); $manager->flush(); $response = $client->request('POST', '/api/login', [ 'headers' => ['Content-Type' => 'application/json'], 'json' => [ "username" => "username", "password" => "T3ST" ]]); $this->assertResponseIsSuccessful(); } }
运行PHPUnit测试时出现错误:Unable to create a signed JWT from the given configuration.,但通过curl、Swagger外部调用该登录接口可正常获取JWT令牌。
解决办法
检查测试环境JWT配置
测试环境通常使用单独的配置文件(如.env.test),需确保其中正确配置JWT密钥信息:JWT_PRIVATE_KEY=%kernel.project_dir%/config/jwt/private.pem JWT_PUBLIC_KEY=%kernel.project_dir%/config/jwt/public.pem JWT_PASSPHRASE=your_passphrase如果测试环境没有对应的密钥文件,执行以下命令生成:
php bin/console lexik:jwt:generate-keypair --env=test清空测试环境缓存
配置修改后需清空测试环境缓存,避免旧配置干扰:php bin/console cache:clear --env=test确认测试客户端环境初始化
创建测试客户端时,明确指定测试环境参数,确保容器加载完整的认证配置:$client = self::createClient([], [ 'HTTP_HOST' => 'your-app.test', 'APP_ENV' => 'test' ]);验证User实体实现
确保User类正确实现Symfony\Component\Security\Core\User\UserInterface,且getUserIdentifier()方法返回正确的用户标识字段(如username),这是JWT生成的必要条件。
内容的提问来源于stack exchange,提问作者Stov
相关产品推荐
相关产品推荐

