Ответ 1
Легким и более удобным вариантом будет показать все параметры входа на странице входа (включая facebook, твиттер, открытый идентификатор или что бы вы ни хотели использовать)
Я пытаюсь аутентифицировать своих пользователей через facebook или userbundle на symfony2
Вот что я сделал до сих пор (и он работает, хотя и не так, как я хочу):
firewalls:
main:
pattern: .*
fos_facebook:
app_url: "http://apps.facebook.com/appName/"
server_url: "http://localhost/facebookApp/"
login_path: /fblogin
check_path: /fblogin_check
default_target_path: /
provider: my_fos_facebook_provider
form_login:
check_path: /login_check
anonymous: true
logout:
handlers: ["fos_facebook.logout_handler"]
Проблема с этой конфигурацией заключается в том, что когда пользователь не вошел в систему, он перенаправлялся на /login (form_login), в то время как я хотел бы, чтобы он был перенаправлен на проверку подлинности Facebook по умолчанию.
Я уже пробовал просто удалить form_login, но тогда, если я получаю доступ/логин (именно так я хочу, чтобы пользователи заходили за пределы facebook), он не знает маршрут /login _check для отправки формы входа
Может быть, chain_provider будет решением? Я не получил его работу
Легким и более удобным вариантом будет показать все параметры входа на странице входа (включая facebook, твиттер, открытый идентификатор или что бы вы ни хотели использовать)
Поставщики цепей действительно являются решением этой проблемы. Вот как вы выглядите: security.yml config shoud:
providers:
my_project.chain_provider:
chain:
providers: [fos_userbundle, my_project.facebook_provider]
fos_userbundle:
id: fos_user.user_provider.username_email
my_project.facebook_provider:
id: my_project.user_provider.facebook
И, конечно же, вам нужно определить своего собственного провайдера Facebook, как указано здесь
Вы должны добавить поставщика fos_userbundle для form_login (и сохранить остальную часть конфигурации):
form_login:
provider: fos_userbundle
Я не копал слишком много, но я думаю, что Symfony2 автоматически создает прикованный провайдер в этом случае.
Также вы можете написать прослушиватель событий, в котором вы будете искать, будет ли пользователь обращаться к форме входа/входа напрямую или перенаправлением.