Компонент безопасности Symfony - Невозможно найти ключ \ "имя пользователя \" в полезных данных токена

С этой конфигурацией, указанной ниже, я столкнулся с какой-то странной проблемой, которую я не могу решить в одиночку, так как я слишком новичок в Symfony.

security:
    encoders:
        App\Api\User\Entity\User:
            algorithm: bcrypt
            cost: 12
    # https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
    providers:
        users:
            id: 'App\Api\Auth\Provider\AuthProvider'
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        # Api will be stateless, a token will be generated
        api_login:
            pattern: /api/login
            stateless: true
            context: api
            anonymous: true
            provider: users
            form_login:
                check_path: /api/login
                username_parameter: email
                password_parameter: password
                success_handler: lexik_jwt_authentication.handler.authentication_success
                failure_handler: lexik_jwt_authentication.handler.authentication_failure
                require_previous_session: false
        # For web calls no need to be stateless
        web_login:
            pattern: /login
            stateless: false
            context: web
            anonymous: true
            provider: users
            guard:
              entry_point: 'App\User\Auth\Guard\LoginAuthenticator'
              authenticators:
                - 'App\Api\Auth\Guard\LoginAuthenticator'
            form_login:
              login_path: /login
              check_path: /login
        api:
            provider: users
            context: api
            pattern: ^/api
            stateless: true
            anonymous: true
            guard:
                authenticators:
                    - lexik_jwt_authentication.jwt_token_authenticator
        web:
            provider: users
            context: web
            pattern: ^(/user|/template)
            stateless: false
            anonymous: true
            guard:
                authenticators:
                    - 'App\Api\Auth\Guard\LoginAuthenticator'
        main:
            pattern:  ^/
            anonymous: ~
            logout:
              path: /logout
              target: /login



    # Easy way to control access for large sections of your site
    # Note: Only the *first* access control that matches will be used

    access_control:
        - { path: ^/api, roles: ROLE_USER }
        - { path: ^/user/*, roles: ROLE_USER }
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }

Я:

  • Бэк-офис с охраняемой территорией с сохранением состояния
  • API с защищенной областью с режимом без сохранения состояния (токен JWT)

Теперь вот что работает:

  • Я могу подключиться к своей HTML-форме и увидеть свои роли и свои данные (электронная почта)
  • Когда я подключаюсь (HTML), я мгновенно перенаправляю на / user / profile конечная точка и посмотреть мою информацию

  • Я могу вызвать свою конечную точку входа в API и получить токен JWT

Вот что не работает

  • Из вызова API у меня есть токен, в котором нет имени пользователя (null)
  • Если вы попытаетесь получить доступ к защищенной области из api, я получу указанную ошибку ниже

Мой декодированный токен:

{"alg":"RS256"}{"roles":["ROLE_USER"],"username":null,"iat":1527787676,"exp":1527791276}

Ошибка:

{
    "code": 401,
    "message": "Unable to find key \"username\" in the token payload."
}

Любая идея ?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
1 108
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поле моей личности - это адрес электронной почты, а не имя пользователя.

В конфигурационном файле jwt мне просто нужно вставить это:

lexik_jwt_authentication:
    private_key_path: '%kernel.project_dir%/%env(JWT_PRIVATE_KEY_PATH)%'
    public_key_path: '%kernel.project_dir%/%env(JWT_PUBLIC_KEY_PATH)%'
    pass_phrase: '%env(JWT_PASSPHRASE)%'
    user_identity_field: email #this line

Другие вопросы по теме