Symfony2: Авторизация через соц. сети VKontakte, Facebook, Odnoklassniki. OAuth 2.0
Update: Рассмотрите в первую очередь https://github.com/hwi/HWIOAuthBundle
Собственно, так получилось, что я сделал авторизацию через 3 популярные соцсети на OAuth 2.0. Тестировалось все под symfony 2.1:
К сожалению, полной документации по интеграции бандлов у меня пока нет, опишу кратко.
Как поставить
./composer.phar require ailove-dev/vk-bundle dev-master
./composer.phar require ailove-dev/ok-bundle dev-master
./composer.phar require ailove-dev/facebook-bundle dev-master
Необходимо в security.yml интегрировать провайдер для нужной соц. сети (если у вас несколько авторизаций будет, то обычно делают chain provider):
providers:
chain_provider:
chain:
providers: [ fos_userbundle, vk_provider, fb_provider, ok_provider]
fos_userbundle:
id: fos_user.user_provider.username_email
vk_provider:
id: vk.user.provider
ok_provider:
id: ok.user.provider
fb_provider:
id: fb.user.provider
Также необходимо описать файрволы:
firewalls:
main:
pattern: ^/
fb_firewall:
check_path: /fb/login_check/
login_path: /fb/login/
use_forward: false
failure_path: /fail
always_use_default_target_path: true
default_target_path: /user/connect/
provider: chain_provider
vk_firewall:
check_path: /vk/login_check/
login_path: /vk/login/
use_forward: false
failure_path: /
always_use_default_target_path: true
default_target_path: /user/connect/
provider: chain_provider
ok_firewall:
check_path: /ok/login_check/
login_path: /ok/login/
use_forward: false
failure_path: /
always_use_default_target_path: true
default_target_path: /user/connect/
provider: chain_provider
anonymous: true
logout:
path: /logout
target: /
/user/connect/ здесь - роут для контроллера, который будет обрабатывать авторизовавшегося пользователя (бандлы только создают соответствующий токен). Пример контроллера можно посмотреть здесь.
Доступ к контроллеру стоит ограничить только для авторизованных пользователь (бандлы используют соответствующие роли, поэтому их стоит добавить в ROLES):
role_hierarchy:
# Social
ROLE_VK_USER: [ROLE_USER]
ROLE_OK_USER: [ROLE_USER]
ROLE_FACEBOOK_USER: [ROLE_USER]
ROLE_REGISTERED: [ROLE_VK_USER, ROLE_OK_USER, ROLE_FACEBOOK_USER]
# Admin
ROLE_ADMIN: ROLE_REGISTERED
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_SONATA_ADMIN, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH, ROLE_SONATA_PAGE_ADMIN_PAGE_EDIT, ROLE_SONATA_PAGE_ADMIN_BLOCK_EDIT, ROLE_REGISTERED]
Cсылки для входа и выхода:
<a href="{{ path('_vk_login') }}">VK</a> | <a href="{{ path('_ok_login') }}">OK</a> | <a href="{{ path('_fb_login') }}">FB</a>
<a href="{{ path('fos_user_security_logout') }}">Выход</a>
Также бандлы поддаются настройке! Посмотреть параметры можно здесь.