Регистрация новых пользователей через OAuth2: что установить в качестве идентификатора пользователя для будущих входов в систему?

Мне удалось успешно настроить это. Проблема в том, что когда я меняю строки ниже:

//I have set all requested data with the user's username
//modify here with relevant data
$user->setUsername($username);
$user->setEmail($username);
$user->setPassword($username);

в информацию, которую я хочу получить, такую ​​как настоящее имя, адрес электронной почты, мой сгенерированный пароль и т. д., когда я нажимаю кнопку входа в Facebook, скажем, меня снова спрашивают, хочу ли я подключиться к своему локальному тестовому сайту.

Насколько я понимаю, в документации, на которую я ссылался выше, это:

$user = $this->userManager->findUserBy(array($this->getProperty($response) => $username));

это строка, которая проверяет, существует пользователь или нет, и исходный код сам по себе устанавливает либо facebook_id, либо twitter_id (именно так я их сохраняю) в качестве нового < strong>Пользователь *имя пользователя*. Если я изменю строку

$user->setUsername($username); //same as facebook/twitter _id

в

$user->setUsername(setProperUsername()); //sets a proper unique username

Затем каждый раз, когда я пытаюсь войти, я получаю сообщение «Регистрация». Итак, у меня есть общее представление о том, как это работает, но мне трудно понять некоторые вещи:

1. Когда я регистрируюсь в Facebook и вхожу в систему через Twitter, я регистрируюсь снова, не создается никаких известных строк, но отсутствующие поля twitter_id обновляются/заполняются, имя пользователя остается нетронутым. Откуда HWI/FOSUB знает, что я тот же человек, если мои предыдущие данные были из Facebook, а не из Twitter?

2. Если есть глобальный способ узнать, что я тот же человек, какие данные из объекта $response следует использовать в качестве ключа для идентификации уже зарегистрированных пользователей?


person stevenll    schedule 11.02.2014    source источник


Ответы (1)


После многих испытаний с этим у меня есть ответ, если кто-то столкнется с такой ситуацией.

  1. Проверьте свой путь default_target, сделайте так, чтобы он был /profile, /account и т. д., не используйте по умолчанию логин снова. Кроме того, если пользователь уже вошел в систему, не предоставляйте ему доступ к вашей странице входа. Это было причиной обновления моих данных. В основном я входил в свою учетную запись Facebook и регистрировался в своей учетной записи Twitter тоже.

  2. Нет, нет глобального способа узнать, что я тот же человек. Объект $response отправил мне уникальный идентификатор для этого конкретного пользователя в соответствии с политикой провайдера. Это можно использовать для идентификации уже зарегистрированных пользователей и их входа в систему.

person stevenll    schedule 13.02.2014