从Facebook OmniAuth Authentication Hash获取信息

时间:2012-04-02 19:42:06

标签: ruby ruby-on-rails-3 oauth omniauth-facebook

我是Ruby和Rails的初学者,但我设法通过Facebook使用OmniAuth进行身份验证。一切正常,我能够创建用户,他们可以使用Facebook登录。

问题是,我想提取一些用户数据(如电子邮件,个人资料照片等)并保存。

通过自述文件(https://github.com/mkdynamic/omniauth-facebook),我找到了:

以下是request.env ['omniauth.auth']中提供的身份验证哈希示例:

{
  :provider => 'facebook',
  :uid => '1234567',
  :info => {
    :nickname => 'jbloggs',
    :email => 'joe@bloggs.com',
    :name => 'Joe Bloggs',
    :first_name => 'Joe',
    :last_name => 'Bloggs',
    :image => 'http://graph.facebook.com/1234567/picture?type=square',
    :urls => { :Facebook => 'http://www.facebook.com/jbloggs' },
    :location => 'Palo Alto, California',
    :verified => true
  }
} 

我尝试在Authentication Hash上进行更多搜索,并获取了一个列出了一些可以提取的信息:https://github.com/intridea/omniauth/wiki/Auth-Hash-Schema

问题是,我要求某些权限。问题是,我怎么知道Facebook发送的是什么类型的信息?不幸的是,在request.env ['omniauth.auth']中说信息对我来说不是很好。我如何从这里获取信息?

我是一个真正的初学者,通过Rails教程(http://ruby.railstutorial.org/)但尝试通过反复试验来创建我自己的应用。

1 个答案:

答案 0 :(得分:2)

request.env ['omniauth.auth']会给你一个哈希值。检查Ruby文档,了解使用哈希可以做什么。

http://ruby-doc.org/core-1.9.3/Hash.html

对于任何并非总是存在的元素,您只需检查blank?(Rails便捷方法),例如

omniauth = request.env['omniauth.auth']
unless omniauth['info']['email'].blank?
  send_spam omniauth['info']['email'] # ;)
end

如果你还没有看过,你可能会发现以下截屏视频:

http://railscasts.com/episodes/235-omniauth-part-1