我正在使用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个人资料中确实设置了生日。传递/提取生日信息需要做些什么呢?
答案 0 :(得分:1)
根据Facebook的登录documentation,public_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'