6

我正在使用 rails gem: OmniAuth 来登录用户。

使用 OpenId 提供程序时,我想获得某些字段,例如电子邮件和昵称,但我没有看到任何关于此的文档。

有任何想法吗?

谢谢

4

6 回答 6

4

您是在问如何请求该数据,或者如何确保您获得它?您可以使用 OpenID AX 属性请求数据,但 OpenID 提供者没有义务响应您的请求。不过,这应该会有所帮助:

在 Rails 中从 Google/Yahoo 检索 OpenID AX 属性

谷歌似乎只会回复一封电子邮件给

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

而雅虎会回复

http://axschema.org/contact/email
于 2011-02-07T13:08:27.967 回答
2

您可能会发现Ryan Bates的这个 Railscast(接近尾声)对于在通过 OpenID 进行身份验证时捕获电子邮件地址很有用。对于其他可用字段,我想您可以在发出身份验证请求时向身份验证控制器添加以下内容

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

然后通过 openID 登录,看看你有什么选项。

于 2011-01-04T16:46:13.117 回答
1

在 Devise omniauth 集成文档的“Google”openID 部分下有一些说明:

https://github.com/plataformatec/devise/wiki/OmniAuth:-概述

查找find_for_open_idUser 模型中的类方法和控制器子类,了解如何从散列Users::OmniauthCallbacksController传递数据。request.env["omniauth.auth"]这与任何 OpenID 策略有关,而不仅仅是 Google 策略。

在准确定制您从 OpenID 提供者那里请求的属性方面,您最好制作自己的omniauth_openidgem 克隆或子类,然后更改options. (见:https ://github.com/intridea/omniauth-openid/blob/master/lib/omniauth/strategies/open_id.rb )

于 2012-07-22T12:06:58.253 回答
0

request.env['omniauth.auth'] 应该有你需要的。对于 Twitter,它返回类似

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

只需检查它的openid。

于 2010-10-17T06:39:13.350 回答
0

request.env['omniauth.auth'] 将包含来自回调的整个响应。但并非所有提供商都会返回用户电子邮件(推特不会)。通过 google 或 yahoo 的 OpenID 应该将电子邮件作为“user_info”哈希的一部分。

于 2011-01-19T12:08:05.293 回答
0

在初始化块中配置omniauth时,您可以覆盖任何选项,包括必填和可选字段。根据文档,使用Builder来获取您需要配置的内容。例如:

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
于 2016-09-02T15:40:48.417 回答