использование symfony аутентификатора с аутентификацией lexik jwt - PullRequest
0 голосов
/ 20 марта 2020

Я работаю над проектом symfony 4: я создал документированный API с платформой API, API предоставляет данные для использования извне, и теперь я хочу добавить панель управления для администрирования. Маршруты API защищены пакетом jwt lexik, и я сгенерировал symfony authenticator.

Мой файл security.yaml:

security:
    encoders:
        App\Entity\AppUser:
            algorithm: auto
    # https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
    providers:
        # used to reload user from session & other features (e.g. switch_user)
        app_user_provider:
            entity:
                class: App\Entity\AppUser
                property: email
        # used to reload user from session & other features (e.g. switch_user)
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            stateless: true
            anonymous: true
            provider: app_user_provider
            json_login:
                check_path: /authentication_token
                username_path: email
                password_path: password
                success_handler: lexik_jwt_authentication.handler.authentication_success
                failure_handler: lexik_jwt_authentication.handler.authentication_failure
            guard:
                authenticators:
                    - lexik_jwt_authentication.jwt_token_authenticator
                    - App\Security\LoginFormAuthenticator
                entry_point: lexik_jwt_authentication.jwt_token_authenticator
            logout:
                path: app_logout
                # where to redirect after logout
                # target: app_any_route
        refresh:
            pattern:  ^/token/refresh
            ...
    access_control:
        ....
        - { path: ^/administrator, roles: IS_AUTHENTICATED_FULLY }

Я хочу использовать оба: токен jwt и symfony Аутентификатор, чтобы иметь возможность управлять ролью администратора и добавить систему администрирования для обработки данных для моего проекта. Теперь, когда я открываю URL:

http://my-project/administrator

, я получил это сообщение:

{"code":401,"message":"JWT Token not found"}

1 Ответ

0 голосов
/ 15 апреля 2020

Вопрос довольно старый, но только для записи, я столкнулся с аналогичной необходимостью и решил ее, используя аннотацию isGranted, поскольку документация предлагает:

После создания roles свойство, как документация предлагает для User сущности, которую вы можете проверить, если пользователь имеет доступ или не объявляет трудную аннотацию для метода или всего класса:

use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;

...

 /**
  * Require ROLE_ADMIN for *every* controller method in this class.
  *
  * @IsGranted("ROLE_ADMIN")
  */

Существует нет необходимости объявлять раздел access_control на security.yaml.

...