пользовательский поставщик аутентификации с анонимным пользователем

У меня есть вопрос, на который я так и не нашел ответа.

Мне нужно поддерживать приложение Symfony, которое использует пользовательскую аутентификацию и поставщика пользователей. Провайдер работает как аспект, и пользователь может правильно войти в систему.

Однако мне нужно сделать несколько маршрутов доступными для анонимных пользователей. Они также должны быть доступны, когда пользователь не полностью аутентифицирован. Поэтому я попытался настроить конфигурацию access_control в security.yml, чтобы сделать эти URL-адреса доступными:

firewalls:
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false

    main:
        pattern: ~
        anonymous: ~
        internal_api:
            provider:        fos_userbundle
            check_path:      /api/user/login

        logout:
            path:   /api/user/logout

access_control:
    - { path: ^/api/init, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/api/resources, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/, roles: ROLE_USER }

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

Итак, мой вопрос: что необходимо для предоставления роли IS_AUTHENTICATED_ANONYMOUSLY через настраиваемого поставщика аутентификации? Можно ли это сделать или мне просто нужно настроить параметры security.yml?

С наилучшими пожеланиями


person jahller    schedule 05.02.2016    source источник
comment
Что такое опция internal_api в вашем main брандмауэре?   -  person chalasr    schedule 05.02.2016
comment
Вы проверили порядок сопоставления маршрутов?   -  person Twifty    schedule 06.02.2016


Ответы (1)


Поскольку маршруты, которые вы хотите сделать доступными для анонимных пользователей, находятся за вашим main брандмауэром и защищены вашим path: ^/ контролем доступа, вы должны создать для них специальный брандмауэр.

Добавьте это в firewalls вашего security.yml:

api_resources:
    pattern: ^/api/resources
    anonymous: ~

api_init: 
    pattern: ^/api/init
    anonymous: ~

И это должно работать.

person chalasr    schedule 06.02.2016