我是rails上的新ruby,我试图获取facebook用户的email_id,但它给我“null”。这是我的代码:

时间:2013-11-29 10:45:18

标签: ruby ruby-on-rails-3

client = FBGraph::Client.new(:client_id => Settings.fb_app_id,:secret_id => Settings.fb_app_secret,:token => params[:access_token])
         info = client.selection.me.info!
         status 200
        {
        :id => info.id,
        :profile_name => info.name,
        :first_name => info.first_name,
        :last_name => info.last_name,
        :authentication_token => client.access_token,
        :email => info.Email
        }
    end

2 个答案:

答案 0 :(得分:0)

你还没有给出足够的代码来继续。您如何使用Javascript SDK或服务器端进行身份验证?

您是否收到过Facebook的访问令牌?

用户的其他参数是否正常工作,即first_name?

为什么它是info.Email我会有,但它可能是info.email但也许不是吗?

您是否申请了扩展权限?我认为电子邮件不在标准权限范围内

一些有用的链接

https://developers.facebook.com/docs/games/canvas-games/authenticate/ https://github.com/nov/fb_graph https://developers.facebook.com/docs/reference/login/extended-permissions/

不是一个真正的答案,但你没有提供足够的代码或解释来完全回答

答案 1 :(得分:0)

了解你的其他参数是否正如Jon Day所说,这很重要。如果是这样,您需要做的就是将info.Email更改为info.email。

https://github.com/mkdynamic/omniauth-facebook

以上omniauth-facebook自述文件提供了您可以调用的AuthHash示例。 :email属性嵌套在:info中,如:first_name,:name:和:last_name params。所以,如果这些对您有用,那么info.email也应该可以正常工作。

来自链接的AuthHash:

{
  :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
  },