Вход в Omnoauth с использованием Linkedin не предоставляет адрес электронной почты в информационном хеше - PullRequest
1 голос
/ 26 марта 2012

Я использую omniauth с LinkedIn в качестве провайдера. LinkedIn не предоставляет адрес электронной почты в информационном хеше, поэтому я не могу предоставить адрес электронной почты при создании на основе пользователя на информацию я вернусь.

Два связанных вопроса:

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

2) Однако я хочу получить информацию по электронной почте, поэтому хочу иметь информация электронной почты, запрашиваемая до создания пользователя. Как я могу перенаправить на страницу / мастера с запросом информации по электронной почте, а затем прийти вернуться к завершению регистрации пользователя?

Ответы [ 2 ]

1 голос
/ 09 августа 2012

Я только что решил эту проблему, не используя отдельный драгоценный камень 'linkedin', это было довольно сложно, так как по этому вопросу явно отсутствовала документация!

Во-первых, вам нужно сделать адрес электронной почты доступным.добавив опцию fields в вашу конфигурацию LinkedIn Omniauth, вам также потребуется переопределить request_token_path, чтобы добавить область действия r_emailaddress, необходимую для получения адреса электронной почты пользователя.

Мой файл в конечном итоге выглядел примерно так (NB.Ruby 1.9.3):

provider :linkedin, external_services['linkedin']['api_key'], external_services['linkedin']['api_secret'], client_options: {request_token_path: '/uas/oauth/requestToken?scope=r_emailaddress'}, fields: ['id', 'first-name', 'last-name', 'headline', 'industry', 'picture-url', 'public-profile-url', 'email-address']

ПРИМЕЧАНИЕ. Не забудьте поменять external_services ['linkedin'] ['api_key'] и external_services ['linkedin'] ['api_secret'] на свои собственные.

После этого вашему пользователю будет предложено разрешить использование его адреса электронной почты, а также его базового ресурса, и вы получите доступ к нему, как только он будет возвращен:

auth['extra']['raw_info']['emailAddress']
* 1014.* Вероятно, я должен зафиксировать это изменение обратно в omniauth-linkedin, чтобы вы могли просто установить область действия: r_emailaddress в настройках провайдера, избегайтедублирование имен полей и получение электронной почты обратно в разделе информации объекта auth.

Если я получу время после завершения этого раздела моего проекта, я сделаю это.

0 голосов
/ 28 марта 2012

Посмотрите на Railskast о omniauth: http://railscasts.com/episodes?utf8=%E2%9C%93&search=omniauth

Идея заключается в следующем:

  • Создать нового пользователя из информации omniauth
  • попытайтесь сохранить пользователя
  • , поскольку адрес электронной почты отсутствует, он не будет проверен
  • сохранит все данные в сеансе и redirect_to new_user_registration_url
  • создаст свой собственный контроллер регистрациикоторый наследует от разработанного
  • , переопределяет метод build_resource(*args), и, если есть данные omniauth, используйте его для создания ресурса (пользователь в вашем случае)

Таким образом, после попытки входа в систему с помощью linkedin, пользователь будет перенаправлен на форму, где он сможет ввести свой адрес электронной почты.

Все это объяснено в railscast;)

...