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:
- во-первых, брандмауэр admin_area с его определенной моделью "^/admin"
- во-вторых, публичный с глобальным шаблоном "^/.*".