OmniAuth & openid: получение определенных полей от поставщика openid - PullRequest
6 голосов
/ 17 октября 2010

Я использую самоцвет rails: OmniAuth для входа в систему.

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

Есть идеи?

спасибо

Ответы [ 6 ]

4 голосов
/ 07 февраля 2011

Вы спрашиваете, как запросить эти данные или как их получить? Вы можете запросить данные, используя атрибуты OpenID AX, но поставщик OpenID не обязан отвечать на ваши запросы. Это должно помочь, хотя:

Получение атрибутов OpenID AX из Google / Yahoo в Rails

Похоже, что Google ответит по электронной почте только на

http://schema.openid.net/contact/email

, тогда как Yahoo ответит на

http://axschema.org/contact/email
2 голосов
/ 04 января 2011

Вы можете найти этот Railscast (ближе к концу) от Райана Бейтса, полезный для захвата адреса электронной почты при аутентификации через OpenID.Для других доступных полей, я думаю, вы можете добавить что-то из следующего к вашему контроллеру аутентификации при создании запроса аутентификации

# authentications_controller.rb
...
def create
  omniauth = request.env["omniauth.auth"]
  raise omniauth.to_yaml
  ...
end
...

, а затем войти в систему через openID и посмотреть, какие опции у вас есть.

1 голос
/ 22 июля 2012

Для этого есть несколько инструкций в разделе «Google» openID в документации по интеграции Devise omniauth:

https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview

Найдите метод класса find_for_open_id в модели User и подкласс контроллера Users::OmniauthCallbacksController, чтобы узнать, как данные передаются из хеша request.env["omniauth.auth"]. Это относится к любой стратегии OpenID, а не только к Google.

С точки зрения точной настройки атрибутов, которые вы запрашиваете у провайдера OpenID, вам лучше всего сделать свой собственный клон гема omniauth_openid или создать подкласс и изменить options. (См .: https://github.com/intridea/omniauth-openid/blob/master/lib/omniauth/strategies/open_id.rb)

0 голосов
/ 02 сентября 2016

Когда вы настраиваете omniauth в своем блоке инициализации, вы можете переопределить любой из параметров, включая обязательные и дополнительные поля.В соответствии с документами, используйте Builder, чтобы получить то, что вам нужно настроить.EG:

config.middleware.use OmniAuth::Builder do
        provider :open_id, :name => 'my_provider',
                 :identifier => 'https://myprovider.com/openid/xrds',
                 :required => ['http://axschema.org/namePerson/first','http://axschema.org/namePerson/last','http://axschema.org/contact/email','http://axschema.org/my_provider/some_field']
    end
0 голосов
/ 19 января 2011

request.env ['omniauth.auth'] будет содержать полный ответ от обратного вызова. Но не все провайдеры возвращают электронную почту пользователя (твиттер не будет). OpenID через Google или Yahoo должен иметь электронную почту как часть хеша user_info.

0 голосов
/ 17 октября 2010

request.env ['omniauth.auth'] должен иметь то, что вам нужно.Для Twitter он возвращает что-то вроде

{
  'uid' => '12356',
  'provider' => 'twitter',
  'user_info' => {
    'name' => 'User Name',
    'nickname' => 'username',
    # ...
  }
}

Просто проверьте его на openid.

...