我能';t使用LexikJWTAuthenticationBundle和Symfony添加3个参数进行身份验证和生成令牌

我能';t使用LexikJWTAuthenticationBundle和Symfony添加3个参数进行身份验证和生成令牌,jwt,jwt-auth,symfony5,lexikjwtauthbundle,Jwt,Jwt Auth,Symfony5,Lexikjwtauthbundle,我正在构建一个RESTAPI,我想再添加一个参数来验证令牌。默认情况下使用用户名和密码,我需要添加第三个参数,但我的代码不起作用。我使用了以下示例: 1.我在该文件夹中创建了文件夹“src\EventListener”和文件“JWTDecodedListener.php” 2.然后,我在该文件中添加了以下内容: <?php namespace App\EventListener; use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTDec

我正在构建一个RESTAPI,我想再添加一个参数来验证令牌。默认情况下使用用户名和密码,我需要添加第三个参数,但我的代码不起作用。我使用了以下示例:

1.我在该文件夹中创建了文件夹“src\EventListener”和文件“JWTDecodedListener.php”

2.然后,我在该文件中添加了以下内容:

<?php

namespace App\EventListener;

use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTDecodedEvent;

class JWTDecodedListener
{
    /**
     * @param JWTDecodedEvent $event
     *
     * @return void
     */
    public function onJWTDecoded(JWTDecodedEvent $event)
    {
        $request = $this->requestStack->getCurrentRequest();
        
        $payload = $event->getPayload();

        if (!isset($payload['contract']) || $payload['contract'] !== $request->getContract()) {
            $event->markAsInvalid();
        }
    }
}
4.在向提出请求的邮递员测试应用程序时“http://127.0.0.1:8000/api/login_check“对于新字段,在验证中未考虑合同字段。我是这样做的:

{
    "username":"9VJ203Q4A53DH8I",
    "roles":["ROLE_USER"],
    "contract": "1122334455",
    "password": "123456"
}
我的项目树如下所示:


我不知道遗漏了什么,也不知道我做错了什么。我希望仅当用户名、合同和密码正确时才返回令牌。

是否触发事件?您可以在那里放置一些var_dump()和exit()来查看吗?是否触发了事件?你能把一些var_dump()和exit()放在那里看看吗?
{
    "username":"9VJ203Q4A53DH8I",
    "roles":["ROLE_USER"],
    "contract": "1122334455",
    "password": "123456"
}