5

Próba zaktualizowania danych użytkownika w bazie danych czasu rzeczywistego po utworzeniu użytkownika. To jest mój kod:Funkcje chmurowe dla zdarzeń Firebase Auth dla dostawcy usług społecznościowych

const functions = require('firebase-functions'); 
const promise = require('request-promise'); 
const admin = require('firebase-admin'); 
admin.initializeApp(functions.config().firebase); 

var omitBy = require('lodash.omitby'); 
var isNil = require('lodash.isnil'); 

'use strict'; 

exports.userCreated = functions.auth.user().onCreate(event => { 

    let request = admin.auth().getUser(event.data.uid) 
    .then(function(user) { 
    console.log("Successfully fetched user data: ", user.toJSON()); 

    var email, firstName, lastName, photoURL; 

    for (var provider of user.providerData) { 

     if (provider.email) { 
     email = provider.email; 
     } 

     if (provider.photoURL) { 
     photoURL = provider.photoURL; 
     } 

     if (provider.displayName) { 
     const names = provider.displayName.split(' '); 
     firstName = names[0]; 

     if (names.length > 1) { 
      lastName = names[names.length - 1]; 
     } 
     } 
    } 

    var values = omitBy({ 
     email: email, 
     first_name: firstName, 
     last_name: lastName, 
     license_agreement_version: '1.1', 
     image_url: photoURL 
    }, isNil); 

    admin.database().ref('users/' + user.uid).set(values); 
    }) 
    .catch(function(error) { 
    console.error("Error Fetching User: ", error); 
    }); 

    return request; 
}); 

Jednak, gdy użytkownik jest tworzony przez. Facebook, dane dostawcy nie są dostarczane. To jest dziennik konsoli:

Successfully fetched user data: { uid: 'exampleUID', 
    email: undefined, 
    emailVerified: false, 
    displayName: undefined, 
    photoURL: undefined, 
    disabled: false, 
    metadata: 
    { lastSignedInAt: 2017-03-16T19:40:59.000Z, 
    createdAt: 2017-03-16T19:40:59.000Z }, 
    providerData: [] } 

Czy robię coś nie tak, czy te dane nie zostaną dostarczone podczas tworzenia?

+0

Czy kiedykolwiek znaleźć wyjaśnienie, jak, dlaczego użytkownik jest niekompletny na Facebooku i Google? –

Odpowiedz

1

Nie trzeba wykonywać kolejnego połączenia z admin.auth().getUser(...). Dogodnie, event.data, który otrzymasz w tej funkcji, jest już UserRecord!

Oto mój bardzo prosty kod do drukowania zdarzeń logowania:

var functions = require('firebase-functions'); 

exports.helloAuth = functions.auth.user().onCreate(event => { 
    console.log("User created: " + JSON.stringify(event)); 
}); 

i oto, co to wyjścia, kiedy zalogować się za pomocą Facebooka:

{ 
    "displayName": "Robert-Jan Huijsman", 
    "email": "[email protected]", 
    "metadata": { 
    "createdAt": "2017-03-17T01:34:03.000Z", 
    "lastSignedInAt": "2017-03-17T01:34:03.000Z" 
    }, 
    "photoURL": "https://scontent.xx.fbcdn.net/v/t1.0-1/p100x100/REDACTED", 
    "providerData": [ 
    { 
     "displayName": "Robert-Jan Huijsman", 
     "email": "[email protected]", 
     "photoURL": "https://scontent.xx.fbcdn.net/v/t1.0-1/p100x100/REDACTED", 
     "providerId": "facebook.com", 
     "uid": "http://facebook.com/1234567890" 
    } 
    ], 
    "uid": "AaBbCcDdEeFf" 
}