1

我是 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
  }
} 

我尝试对身份验证哈希进行更多搜索,并得到了它,其中列出了一些可以获取的信息:https ://github.com/intridea/omniauth/wiki/Auth-Hash-Schema

问题是,我要求某些权限。问题是,我怎么知道 Facebook 正在发送什么样的信息?不幸的是,说信息在 request.env['omniauth.auth'] 对我没有多大好处。我如何从这里获取信息?

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

4

1 回答 1

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

于 2012-04-02T19:57:13.813 回答