Получение имени / фамилии / адреса электронной почты из Twitter с помощью OAuth - PullRequest
6 голосов
/ 02 января 2012

Я использую omniauth исключительно для того, чтобы разрешить вход на мой сайт через facebook / google / twitter.

Я храню имя, фамилию и адрес электронной почты.Однако, когда я поднимаю хэш твиттера из oauth, я получаю только псевдоним, имя, местоположение, изображение, описание и URL-адреса в хэше аутентификации.

Есть ли область, которую я могу передать в своем инициализаторе, чтобы получить пользователяадрес электронной почты и имя в поля first_name, last_name?

Ответы [ 6 ]

8 голосов
/ 02 января 2012

Твиттер не выдает электронные письма пользователей, поэтому вы не сможете получить эту информацию из API Twitter.Вместо этого вы должны попросить пользователя ввести свой адрес электронной почты в форме регистрации.

Что касается разделения имени, вы сделаете это, как только вернете хеш, используя что-то вроде:

social_params ||= request.env["omniauth.auth"]
fullname = social_params["user_info"]["name"].split(' ')
first_name, last_name = fullname[0], fullname[1]
puts "first name is #{first_name} and last name is #{last_name}"

Просто имейте в виду, что last_name может быть nil, если у них нет пробела в имени или они не дали фамилию.Это также не учитывает тот факт, что многие люди имеют несколько фамилий в других культурах.

2 голосов
/ 12 мая 2016

Использование текущего API Twitter возможно получение электронной почты. Вы должны заполнить форму, запрашивающую это разрешение. Процесс прост и быстр, это объясняется здесь .

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

После внесения в белый список флажок «Запросить адреса электронной почты у пользователей» будет доступен в разделе «Разрешения для вашего приложения» на apps.twitter.com. Поля URL Политики конфиденциальности и URL Условия предоставления услуг также будут доступны в настройках, необходимых для доступа к электронной почте. Если этот параметр включен, пользователи будут получать в диалоговом окне oauth / authorize информацию о том, что ваше приложение может получить доступ к их адресу электронной почты.

1 голос
/ 02 января 2012

Что ж, Twitter by Design не пропустит использование вами идентификатора электронной почты. Это преднамеренное дизайнерское решение команды API.

Вот та же ветка для вашей ссылки

Есть лиспособ получить идентификатор электронной почты пользователя после проверки ее личности в Twitter с помощью OAuth?

0 голосов
/ 14 октября 2015

для использования php:

$names = explode(' ',$socialData->firstName);
$socialData->firstName=array_shift($names);
$socialData->lastName=implode(' ',$names);

Помните, что имя может иметь несколько фамилий и, возможно, несколько имен, это касается нескольких фамилий, но не имен.

0 голосов
/ 03 июня 2014

OmniAuth дает вам все имена, объединенные в одну строку. Но у некоторых людей есть имена, состоящие более чем из двух слов, например, «Джон Кларк Смит». Вы можете относиться к ним тремя различными способами:

(1) first_name: "Джон", фамилия: "Smith"

  def first_name
    if name.split.count > 1
      name.split.first
    else
      name
    end
  end

  def last_name
    if name.split.count > 1
      name.split.last
    end
  end

(2) first_name: "Джон Кларк", фамилия: "Smith"

  def first_name
    if name.split.count > 1
      name.split[0..-2].join(' ')
    else
      name
    end
  end

  def last_name
    if name.split.count > 1
      name.split.last
    end
  end

(3) first_name: "Джон", фамилия: "Clark Smith"

  def first_name
    name.split.first
  end

  def last_name
    if name.split.count > 1
      name.split[1..-1].join(' ')
    end
  end

В приведенных выше примерах предполагается, что если имя содержит менее 2 слов, то это имя. Этот вопрос похож на этот

0 голосов
/ 03 февраля 2014

Если у вас есть интеграция с FB, Google и Twitter, вам нужно иметь первое и последнее в вашей БД (если ваш пользовательский интерфейс требует этого> моего случая).Это то, что я придумал, поскольку в некоторых странах есть люди с более чем двумя токенами для своих имен, например: (Марко де Франка Солис) или (Марко де Франка Солис)

...