我正在使用rails gem:OmniAuth登录用户。
当使用OpenId提供程序时,我想获得某些字段,例如电子邮件和昵称,但我没有看到任何关于此的文档。
有什么想法吗?
感谢
答案 0 :(得分:4)
您是在询问如何申请这些数据,或者如何确保获得该数据?您可以使用OpenID AX属性请求数据,但OpenID提供程序没有义务响应您的请求。这应该是一些帮助:
Retrieve OpenID AX attributes from Google / Yahoo in Rails
Google似乎只会通过电子邮件回复
http://schema.openid.net/contact/email
而雅虎将回复
http://axschema.org/contact/email
答案 1 :(得分:2)
您可能会发现Ryan Bates的this Railscast (towards the end)对于通过OpenID进行身份验证时捕获电子邮件地址非常有用。对于其他可用字段,我猜您在进行身份验证请求时可以向身份验证控制器添加以下内容
# authentications_controller.rb
...
def create
omniauth = request.env["omniauth.auth"]
raise omniauth.to_yaml
...
end
...
然后通过openID登录并查看您有哪些选项。
答案 2 :(得分:1)
在Devise omniauth集成文档的“Google”openID部分下有一些说明:
https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview
在User模型和控制器子类find_for_open_id
中查找类方法Users::OmniauthCallbacksController
,了解数据如何从request.env["omniauth.auth"]
哈希传递。这与任何OpenID战略有关,而不仅仅是Google战略。
在从OpenID提供程序中精确定制您要求的属性方面,您最好自己克隆omniauth_openid
gem或将其子类化并更改options
。 (见:https://github.com/intridea/omniauth-openid/blob/master/lib/omniauth/strategies/open_id.rb)
答案 3 :(得分:0)
request.env ['omniauth.auth']应该有你需要的东西。对于Twitter,它返回类似
的内容{
'uid' => '12356',
'provider' => 'twitter',
'user_info' => {
'name' => 'User Name',
'nickname' => 'username',
# ...
}
}
只需检查它是否为openid。
答案 4 :(得分:0)
request.env ['omniauth.auth']将包含来自回调的整个响应。但并非所有提供商都返回用户电子邮件(推特不会)。通过谷歌或雅虎的OpenID应该有电子邮件作为'user_info'哈希的一部分。
答案 5 :(得分:0)
在初始化块中配置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