FOSFacebookBundle & FOSUserBundle для разных пользователей спереди и сзади

Я хочу использовать FOSFacebookBundle с FOSUserBundle для управления:

  • Фронт с подключением Facebook
  • бэк-офис для пользователей-администраторов с классическим логином / паролем (здесь нет подключения к Facebook!)

Я использую Propel в качестве ORM и AdminGeneratorGeneratorBundle для управления бэк-офисом. Я переопределяю файл schema.yml в Propel для FOSUserBundle, чтобы добавить определенные "поля facebook".

Процесс работает нормально для фронта, но когда я пытаюсь получить доступ к URL "/admin", он не работает должным образом. У меня есть страница входа в систему, но когда я ввожу логин / пароль, я перенаправляю на страницу подключения к Facebook...

Это только неправильная конфигурация конфигурационного файла, или я не в порядке?

вот мои файлы конфигурации:

security.yml

security:
providers:
    fos_userbundle:
        id: fos_user.user_provider.username
    fos_facebook_provider:
        id: my.facebook.user

encoders:
    FOS\UserBundle\Model\UserInterface: sha512

firewalls:
    # Firewall public / FB Connect
    public:
        # since anonymous is allowed users will not be forced to login
        pattern:            ^/.*
        fos_facebook:
            provider:       fos_facebook_provider
            app_url:        "http://apps.facebook.com/fb-localhost-testing/"
            server_url:     "http://localhost/fb-localhost-testing/"
        anonymous:          true

    # Firewall zone admin
    admin_area:
        pattern:                  ^/admin
        form_login:
            provider:             fos_userbundle
            csrf_provider:        form.csrf_provider
            login_path:           /admin/login
            check_path:           /admin/login_check
            default_target_path:  /admin/
        logout:        
            path:                 /admin/logout
            target:               /admin/login
        anonymous:                true

access_control:
    - { path: ^/admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/, role: ROLE_ADMIN }
    - { path: ^/connected/.*, role: [ROLE_FACEBOOK] }
    - { path: ^/.*, role: [IS_AUTHENTICATED_ANONYMOUSLY] }

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: ROLE_ADMIN

config.yml

# FOSUser Configuration
fos_user:
    user_class:         FOS\UserBundle\Propel\User
    db_driver:          propel
    firewall_name:      main

# FOSFacebook Configuration
fos_facebook:
    alias:              fb-localhost-testing
    app_id:             mmyid
    secret:             mysecret
    cookie:             true
    permissions:        [email, user_birthday, user_location]

services:
    my.facebook.user:
        class:              MyProject\Security\User\Provider\FacebookProvider
        arguments:
            facebook:       "@fos_facebook.api"
            userManager:    "@fos_user.user_manager"
            validator:      "@validator"

1 ответ

Решение: нам нужно определить конкретную модель перед глобальными.

Чтобы решить мою проблему, я просто переключаю 2 блока брандмауэров на public & admin_area:

  1. во-первых, брандмауэр admin_area с его определенной моделью "^/admin"
  2. во-вторых, публичный с глобальным шаблоном "^/.*".
Другие вопросы по тегам