2012-12-18 20 views
11

Stworzyłem aplikację Meteor, która umożliwia użytkownikom logowanie się za pomocą Facebooka. Aby to zrobić, używam pakietów kont - ui i accounts-facebook. To działa dobrze.Jak uzyskać adres e-mail użytkownika za pomocą kont-facebook w Meteor?

Jak mogę pobrać adres e-mail użytkownika po zalogowaniu? Rozumiem, że wymaga to specjalnego pozwolenia, dlatego dodałem email jako "Uprawnienie znajomego" w ustawieniach aplikacji na stronie programistów Facebooka. W następstwie dokumentacji Meteor, ja również skonfigurować Account.ui.config takiego:

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

zgodnie z oczekiwaniami, gdy użytkownik z mojej aplikacji za pomocą znaków na Facebooka, to poprawnie prosi ich, aby udostępnić swój adres e-mail. Ale jak mogę to odzyskać? Dokument użytkownika ma tylko numery _id i profile.name.

+0

Podczas korzystania 'kont-facebook', nie trzeba konfigurować' kont-ui' z tymi uprawnieniami - e-mail i podstawowe informacje są wymagane domyślnie. 'passwordSignupFields' jest używane tylko dla zwykłych kont, nie dla Facebooka. – Rahul

Odpowiedz

9

Adres e-mail użytkownika Facebooka jest przechowywany w [userDocument].services.facebook.email, który nie jest publikowany dla klienta, ale można uzyskać do niego dostęp z serwera lub klienta za pomocą Meteor.methods i Meteor.call.

+2

I można opublikować pole e-mail na serwerze za pomocą np. 'Meteor.publish (" facebook_email ", function() {return Meteor.users.find ({_ id: this.userId}, {pola: {'services.facebook.email': 1}});});', dbając o publikowanie wiadomości e-mail użytkownika tylko dla tego użytkownika, aby zapobiec problemom związanym z prywatnością. – Rahul

+0

Czy ktoś zna składnię do uzyskania obrazu z Facebooka? Próbowałem następujących i ich odmian, bez powodzenia: 'Meteor.users.find ({_ id: this.userId}, {fields: {'services.facebook.picture.data.url': 1}});' – AbigailW

0

spowoduje to dodanie informacji o profilu na Facebooku do obiektu użytkownika po stronie klienta.

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 

po stronie Serwer facebook.accesstoken mogą być dostępne ... więc go używać, aby uzyskać pełne informacje FB i zapisać go do obiektu użytkownika klienta ..

ping Meteor.user () w konsoli teraz, aby uzyskać informacje o FB.

sądzę że to jest właśnie najlepsze praktyki w zakresie posiadania informacji FB na kliencie ..

+0

Robiąc to w ten sposób (miło po wyjęciu z pudełka myśląc, btw) omijasz system publikowania Meteor, który prawdopodobnie nie jest dobrą ścieżką do zejścia, ponieważ twój kod będzie mniej przewidywalny. Zobacz odpowiedź JWS dla podejścia zalecanego przez Meteor. – Rahul

+0

należy to dodać do dokumentacji kont-facebook. – steveinatorx