Подключите пользователя системы к стороннему поставщику аутентификации, используя пакет HWIOAuth без FOSUB - PullRequest
0 голосов
/ 24 ноября 2018

Вот мой 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.

Моя цель - получить следующий рабочий процесс пользователя:

  1. На странице профиля пользователь может присоединить учетную запись Facebook к своей существующей системной учетной записи (как мне это сделать? Какой маршрут мне следует применить / отредактировать?)
  2. На странице входа пользователь может пройти проверку подлинности с помощью Facebook, и еслиу него уже есть эта учетная запись, прикрепленная к учетной записи исторических систем - войдите в него. Если нет, проверьте, есть ли у нас системная учетная запись с тем же адресом электронной почты, который предоставлен Facebook: если есть одна - откажитесь в аутентификации и просимвойти в систему как системная учетная запись и привязать учетную запись FB изнутри;если есть нет - создайте системную учетную запись, свяжитесь с FB и войдите в систему. Как мне это сделать?С чего мне начать?Какие части уже обработаны HWIOAuthBundle?
...