2016-02-05 5 views
1

У меня есть вопрос, на который я действительно не нашел ответа.поставщик собственной аутентификации с анонимным пользователем

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

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

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?

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

+0

Что такое опция 'internal_api' в вашем основном брандмауэре? – chalasr

+0

Вы проверили заказ своего маршрута? – Twifty

ответ

0

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

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

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

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

И он должен работает.