如何在RoR中使用omniauth来提取Facebook生日信息?

时间:2016-09-30 20:23:22

标签: ruby-on-rails facebook api ruby-on-rails-4 omniauth

我正在使用Rails 4.2.7和Omniauth 1.3.1。当有人使用Facebook登录我的应用程序时,我想记录他们的生日,然而,当我拿到我的auth对象时,我无法弄清楚如何从Facebook的网站中提取它。我在config / initializers / omniauth.rb文件中有这个...

Rails.application.config.middleware.use OmniAuth::Builder do
    …   

  provider :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'],
           scope: 'public_profile', info_fields: 'id,email,link,birthday,first_name,last_name'

但是一旦我的回调被返回到我的应用程序..

class SessionsController < ApplicationController
  def create
    user = User.from_omniauth(env["omniauth.auth"])

电话会死,因为没有生日可以提取......

def self.from_omniauth(auth)
  puts "extra: #{auth.extra}" 
  bday = Date.strptime(auth.extra.raw_info.birthday,'%m/%d/%Y')

“extra:”中打印的内容是

extra: #<OmniAuth::AuthHash raw_info=#<OmniAuth::AuthHash first_name=“MyName” id="1777736954079999” last_name=“LastName” link="https://www.facebook.com/app_scoped_user_id/1777736954079999/">>

即使我在Facebook个人资料中确实设置了生日。传递/提取生日信息需要做些什么呢?

1 个答案:

答案 0 :(得分:1)

根据Facebook的登录documentationpublic_profile的权限不包括生日信息,只包含以下字段:id, name, first_name, last_name, age_range, link, gender, locale, picture, timezone, updated_time, verified

user_birthday权限可让您访问某人生日的日期和月份。他们还声明可能包含或不包括年份。

尝试将user_birthday添加到您的范围。

provider :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'],
       scope: 'public_profile,user_birthday', info_fields: 'id,email,link,birthday,first_name,last_name'