Подключение к нескольким социальным логинам в HWIOauthBundle

Я пытаюсь организовать вход в социальную сеть (изначально LinkedIn, но это может быть любая другая или созданная самостоятельно из FosUserBundle), а затем добавлять новые подключения к тому же пользователю через Twitter, FB, Github, и т.п.

Сложность заключается в подключении нескольких учетных записей в FosUser и HWIOauthBundles. Чтобы собрать как можно больше данных и иметь возможность легко добавлять дополнительные подключения к службам, мне бы очень хотелось, чтобы каждое новое подключение было записью «один ко многим». IE: первоначальный вход в LinkedIn создает запись FosUser и новую строку в таблице «socialLogin», следующий (скажем, вход в Twitter) добавляет новую строку в таблицу «socialLogin», которая ссылается на fosUser.id. .

Как я могу использовать вошедшего в систему (Fos) пользователя как часть новой записи, которую сгенерирует HWIOauth? Конечным результатом будет возможность войти в систему с любым известным пользователем, чтобы войти в ту же учетную запись.


person Alister Bulman    schedule 17.10.2013    source источник


Ответы (2)


Решение на самом деле простое. Сначала проверьте Symfony2: как войти используя OAuth (HWIOAuthBundle) + пользовательские роли (по умолчанию и загруженные из БД), что является отличным практическим руководством для HwiOAuthBundle, а затем прокрутите вниз и внимательно просмотрите раздел public function loadUserByOAuthUserResponse(){ ... }.

Оттуда ваш рабочий процесс будет проверять имя поставщика из объекта ответа. И затем на основе имени провайдера вы можете обновить своего пользователя (используйте электронную почту для поиска). Однако с твиттером у вас могут возникнуть проблемы, потому что твиттер не предоставляет адрес электронной почты пользователя. Поэтому вам нужно запросить у своего пользователя этот адрес электронной почты, и после того, как вы его получите, вам может потребоваться объединить текущую учетную запись пользователя (для регистрации на основе твиттера считайте ее временной a/c) с предыдущей учетной записью пользователя с этим адресом электронной почты.

В противном случае, если ваш пользователь уже вошел в систему, используя form/other-social-login (до подключения к твиттеру), вы можете добавить его данные в твиттере, как только он подключится к нему. Но вам нужно сохранить информацию о пользователе, вошедшем в систему в данный момент, в сеансе (чтобы вы могли получить его после того, как пользователь вернется с токеном twitter)

Надеюсь, поможет

person Hasin Hayder    schedule 26.10.2013
comment
Похоже, что для их подключения по-прежнему используются данные, полученные из различных учетных записей. У меня разные адреса электронной почты на FB, Linkedin и других сайтах. Я пытаюсь создать первоначальную учетную запись на основе FosUser и продолжаю добавлять к ней новые социальные учетные записи, избегая необходимости искать какую-либо информацию, которой может даже не быть. - person Alister Bulman; 29.10.2013

Первым шагом будет создание отношения между сущностью пользователя и таблицей social_data, а все остальное — переопределение пользовательского поставщика пользователей FOSUBUserProvider.php, что, я полагаю, вы уже начали делать, поскольку у вас есть FOSUserBundle и HWIOAuthBundle, работающие вместе.

Позже я внесу некоторые изменения в фактический код, но я должен был ответить на этот вопрос, чтобы вы были в курсе до тех пор.

person Udan    schedule 22.10.2013