2016-09-30 5 views
-1

Ich verwende Rails 4.2.7 mit Omniauth 1.3.1. Wenn sich jemand über Facebook bei meiner App anmeldet, möchte ich seinen Geburtstag aufzeichnen, aber ich kann nicht herausfinden, wie ich ihn von der Facebook-Seite extrahieren kann, wenn ich mein Auth-Objekt erhalte. Ich habe dies in meiner config/initializers/omniauth.rb Datei ...Wie verwende ich omniauth in RoR, um Facebook Geburtstag Informationen zu extrahieren?

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' 

aber sobald mein Rückruf an meine Anwendung zurückgegeben wird ..

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

Der Aufruf stirbt, weil es keinen Geburtstag zu extrahieren ...

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

Was in ausgedruckt wird „extra“ ist

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/">> 

obwohl ich definitiv einen Geburtstag in meinem Facebook-Profil eingerichtet habe. Was muss ich noch tun, um die Geburtstagsinformationen zu übergeben/extrahieren?

+2

versuchen, 'user_birthday' zu scope –

Antwort

1

Gemäß der Facebook-Anmeldung documentation enthält die Berechtigung für public_profile keine Geburtstagsinformationen, sondern nur die folgenden Felder: id, name, first_name, last_name, age_range, link, gender, locale, picture, timezone, updated_time, verified.

Die user_birthday Erlaubnis gibt Ihnen Zugriff auf Datum und Monat des Geburtstages einer Person. Sie geben auch an, dass es das Jahr enthalten kann oder nicht.

Versuchen Sie, user_birthday zu Ihrem Oszilloskop hinzuzufügen.

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

funktioniert gut für mich. Vielen Dank! –

Verwandte Themen