2012-12-18 8 views
11

Ich habe eine Meteor-App erstellt, mit der sich Benutzer über Facebook anmelden können. Um dies zu tun, verwende ich die Accounts-UI und Accounts-Facebook-Pakete. Das funktioniert gut.Wie erhalte ich die E-Mail-Adresse eines Benutzers mit Accounts-Facebook in Meteor?

Wie kann ich die E-Mail-Adresse des Benutzers abrufen, nachdem sie sich angemeldet haben? Ich verstehe, dass dies spezielle Erlaubnis erfordert, und so fügte ich email als "Benutzer & Friend's Permission" in den App-Einstellungen auf der Facebook-Entwickler-Website hinzu. Im Anschluss an die Meteor Dokumentation, habe ich oben auch Account.ui.config wie folgt aus:

Accounts.ui.config({ 
    requestPermissions: { 
    facebook: ['email'], 
    }, 
    passwordSignupFields: 'USERNAME_AND_EMAIL' 
}); 

Wie erwartet, wenn ein Benutzer meiner App Zeichen zur Verwendung von Facebook, fragt er sie richtig ihre E-Mail-Adresse zu teilen. Aber wie kann ich es abrufen? Das Benutzerdokument hat nur die _id und profile.name.

+0

Wenn 'Konten-facebook' verwenden, müssen Sie die' Konten-ui' mit diesen Berechtigungen nicht konfigurieren - E-Mail und grundlegende Informationen werden standardmäßig angefordert. 'passwordSignupFields' wird nur für normale Accounts verwendet, nicht für Facebook. – Rahul

Antwort

9

Die E-Mail-Adresse des Facebook-Benutzers wird in [userDocument].services.facebook.email gespeichert, die nicht auf dem Client veröffentlicht wird, aber vom Server oder vom Client aus über Meteor.methods und Meteor.call abgerufen werden kann.

+2

Und Sie könnten das E-Mail-Feld auf dem Server mit z. B. veröffentlichen. 'Meteor.publish (" facebook_email ", function() {return Meteor.users.find ({_id: this.userId}, {fields: {'services.facebook.email': 1}});});', Achten Sie darauf, nur die E-Mail-Adresse des Benutzers für diesen Benutzer auf dem Client zu veröffentlichen, um Datenschutzprobleme zu vermeiden. – Rahul

+0

Kennt jemand die Syntax für das Facebook-Bild? Ich versuchte folgendes und Variationen davon, ohne Glück: 'Meteor.users.find ({_ id: this.userId}, {fields: {'services.facebook.picture.data.url': 1}});' – AbigailW

0

Dies wird die Facebook-Profilinformationen zum clientseitigen Benutzerobjekt hinzufügen.

Accounts.onCreateUser (options, user) ->  

    if options.profile 
     user.profile = options.profile 

     # get profile data from Facebook 
     result = Meteor.http.get "https://graph.facebook.com/me", { 
        params: access_token: user.services.facebook.accessToken} 

     if !result.error && result.data 
      #if successfully obtained facebook profile, save it off 
      #the user can access the profile object on the client 
      user.profile.facebook = result.data; 

    return user 

auf der Serverseite die facebook.accesstoken zugegriffen werden kann ... so nutzen sie die volle FB Informationen zu erhalten und sie an den Client-Benutzerobjekt speichern ..

ping ein Meteor.user () in der Konsole jetzt um die FB Info zu bekommen.

denke nicht, daß das ist genau das Best Practice in Bezug auf die auf dem Client-FB info mit ..

+0

Indem Sie es auf diese Art und Weise tun (nettes Denken, btw), umgehen Sie das Publishing-System von Meteor, was wahrscheinlich kein guter Weg ist, da Ihr Code weniger vorhersehbar ist. Siehe die Antwort von JWS für den von Meteor empfohlenen Ansatz. – Rahul

+0

Dies muss zu den Accounts-Facebook-Dokumenten hinzugefügt werden. – steveinatorx

Verwandte Themen