Вот мой routing.yml:
hwi_oauth_redirect:
resource: "@HWIOAuthBundle/Resources/config/routing/redirect.xml"
prefix: /connect
hwi_oauth_connect:
resource: "@HWIOAuthBundle/Resources/config/routing/connect.xml"
prefix: /connect
hwi_oauth_login:
resource: "@HWIOAuthBundle/Resources/config/routing/login.xml"
prefix: /login
elama.facebook_login:
path: /login/check-facebook
#the rest of the file are my services
Вот мой полный security.yml:
security:
providers:
database:
id: elama.user.user_provider
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
private_api:
pattern: ^/private_api/
security: false
client_area:
context: client_area
provider: database
pattern: ^/
anonymous: ~
elama: true
logout:
path: /logout
target: /
success_handler: elama.auth_event_listener
oauth:
resource_owners:
facebook: "/login/check-facebook"
login_path: /login
use_forward: false
failure_path: /login?failed=true
oauth_user_provider:
service: 'elama.user.user_provider'
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/system, roles: [ROLE_ADMIN, ROLE_CONTROL_PANEL_USERS] }
role_hierarchy:
ROLE_ADMIN: [ROLE_ALPHA, ROLE_BETA]
и в моем config.yml у меня есть следующий раздел:
hwi_oauth:
firewall_names: [client_area]
resource_owners:
facebook:
type: facebook
client_id: '%hwioauth.facebook.client_id%'
client_secret: '%hwioauth.facebook.client_secret%'
options:
csrf: true
display: popup #dialog is optimized for popup window
auth_type: rerequest # Re-asking for Declined Permissions
Когда я перехожу на https://my_host/connect/facebook
, я получаю страницу авторизации Facebook, которая при отправке перенаправляет меня на /login?failed=true#_=_
.Чтобы исключить исключение UserNotFoundException из уравнения, я заставил мою службу elama.user.user_provider
(которая реализует требуемый интерфейс OAuthAwareUserProviderInterface
) возвращать реально существующий пользовательский экземпляр (жестко заданный для принудительного возврата пользовательского экземпляра), но это не помогло.ОБНОВЛЕНИЕ: Это было из-за того, что я пропустил тип объекта, который возвращал из loadUserByOAuthUserResponse
: это был пользовательский объект User, не соответствующий UserInterface.
Моя цель - получить следующий рабочий процесс пользователя:
- На странице профиля пользователь может присоединить учетную запись Facebook к своей существующей системной учетной записи (как мне это сделать? Какой маршрут мне следует применить / отредактировать?)
- На странице входа пользователь может пройти проверку подлинности с помощью Facebook, и еслиу него уже есть эта учетная запись, прикрепленная к учетной записи исторических систем - войдите в него. Если нет, проверьте, есть ли у нас системная учетная запись с тем же адресом электронной почты, который предоставлен Facebook: если есть одна - откажитесь в аутентификации и просимвойти в систему как системная учетная запись и привязать учетную запись FB изнутри;если есть нет - создайте системную учетную запись, свяжитесь с FB и войдите в систему. Как мне это сделать?С чего мне начать?Какие части уже обработаны HWIOAuthBundle?