首页 > 解决方案 > 使用 lexik 将公共数据添加到 JWT 响应

问题描述

我目前正在使用带有 lexik 的 Symfony 5,当我生成 JWT 令牌时,我希望得到响应以获取令牌和用户名,这样我就可以得到这样的东西:

{
    "username":"username"
    "token": "token"
}

我当然尝试在这里使用文档:https ://github.com/lexik/LexikJWTAuthenticationBundle/blob/master/Resources/doc/2-data-customization.md#eventsauthentication_success---adding-public-data-to- the-jwt-response但是每当我在 Postman 中测试它时,我仍然只能得到令牌,而且我完全被困在做什么......

我的事件监听器:

<?php

namespace App\EventListener;

use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationSuccessEvent;


class AuthenticationSuccessListener
{
    /**
     * @param AuthenticationSuccessEvent $event
     */
    public function onAuthenticationSuccessResponse(AuthenticationSuccessEvent $event)
    {
        $data = $event->getData();
        $user = $event->getUser();

        if (!$user instanceof UserInterface) {
            return;
        }

        $data['data'] = array(
            'username' => $user->getUsername(),
        );

        $event->setData($data);
    }
}

services.yaml 中的服务

acme_api.event.authentication_success_listener:
        class: App\EventListener\AuthenticationSuccessListener
        tags:
            - { name: kernel.event_listener, event: lexik_jwt_authentication.handler.authentication_success, method: onAuthenticationSuccessResponse }

任何帮助将不胜感激

标签: phpsymfony

解决方案


尝试在侦听器中添加用户界面使用,这可能是因为您没有抛出 if 语句:

use Symfony\Component\Security\Core\User\UserInterface;

推荐阅读