2012-12-18 13 views
11

Ho creato un'applicazione Meteor che consente agli utenti di accedere tramite Facebook. Per fare questo, sto usando i pacchetti account-ui e account-facebook. Funziona beneCome posso ottenere l'indirizzo email di un utente utilizzando account-facebook in Meteor?

Come recuperare l'indirizzo e-mail dell'utente dopo l'accesso? Comprendo che ciò richiede un permesso speciale e quindi ho aggiunto Permesso per gli amici " nelle impostazioni dell'app sul sito degli sviluppatori di Facebook. In seguito la documentazione Meteor, ho anche creato Account.ui.config come questo:

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

Come previsto, quando un utente dei miei segni app su utilizzando Facebook, si chiede loro correttamente per condividere il loro indirizzo di posta elettronica. Ma come posso recuperarlo? Il documento utente ha solo il _id e profile.name.

+0

Quando si utilizza 'conti-facebook', non è necessario configurare l'account-ui'' con quelle autorizzazioni - email e informazioni di base sono richieste per impostazione predefinita. 'passwordSignupFields 'è usato solo per account regolari, non per Facebook. – Rahul

risposta

9

L'indirizzo di posta elettronica dell'utente di Facebook è memorizzato in [userDocument].services.facebook.email, che non è pubblicato sul client, ma è possibile accedervi dal server o dal client utilizzando Meteor.methods e Meteor.call.

+2

E potresti pubblicare il campo email sul server usando ad es. 'Meteor.publish (" facebook_email ", function() {return Meteor.users.find ({_ id: this.userId}, {fields: {'services.facebook.email': 1}});});', avendo cura di pubblicare l'e-mail dell'utente sul client per quell'utente per evitare problemi di privacy. – Rahul

+0

Qualcuno conosce la sintassi per ottenere l'immagine di Facebook? Ho provato quanto segue e le sue varianti, senza fortuna: 'Meteor.users.find ({_ id: this.userId}, {fields: {'services.facebook.picture.data.url': 1}});' – AbigailW

0

questo aggiungerà le informazioni del profilo di Facebook all'oggetto utente lato client.

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 

sul lato server il facebook.accesstoken è possibile accedere ... in modo da utilizzare per ottenere la piena informazioni FB e salvarlo con l'oggetto utente client ..

ping un Meteor.user () nella console ora per ottenere le informazioni FB.

non penso che questo è esattamente delle migliori pratiche in termini di avere informazioni FB sul client ..

+0

Facendolo in questo modo (bella fuori dagli schemi pensando, btw) stai aggirando il sistema di pubblicazione di Meteor, che probabilmente non è un buon percorso da seguire perché il tuo codice sarà meno prevedibile. Vedi la risposta di JWS per l'approccio consigliato da Meteor. – Rahul

+0

deve essere aggiunto ai documenti Accounts-facebook. – steveinatorx