2017-05-02 4 views
0
import * as functions from 'firebase-functions'; 
import * as admin from 'firebase-admin'; 

export default functions.auth.user().onCreate(saveUserToDatabase); 

async function saveUserToDatabase(event) { 
    const Users = admin.database().ref('Users'); 
    const authUser = event.data; 

    let user = await Users.child(authUser.uid).set({ 
     createdAt: authUser.metadata.createdAt.toString(), 
     email: authUser.email, 
     facebookId: authUser.providerData[0].uid.replace('http://facebook.com/', ''), 
     lastSignedInAt: authUser.metadata.lastSignedInAt.toString(), 
     name: authUser.displayName, 
     photoUrl: authUser.photoURL, 
    }); 

    console.log('saveUserToDatabase()'); 
    console.log(authUser); 
} 

Im obigen Code speichere ich einen Benutzer in der Firebase-Datenbank, wenn sie sich registrieren. Jetzt, außer ich verwende die toString Methode an den Daten, die sie nicht speichern. Ich habe das ein wenig weiter untersucht und festgestellt, dass die Daten nicht als Strings eingehen und das einige Probleme verursacht. (Ich tat dies mit console.log und Überprüfung der Feuerbasis Armaturenbrett)Cloud-Funktionen für Firebase onCreate() -Daten nicht korrekt formatiert

{ displayName: 'Test User', 
    email: '[email protected]', 
    metadata: 
    { createdAt: 2017-05-02T05:18:45.000Z, 
    lastSignedInAt: 2017-05-02T05:18:45.000Z } 
} 

Wenn ich die toString-Methode verwenden, obwohl es wandelt die Ausgabe an:

"Tue May 02 2017 05:24:31 GMT+0000 (UTC)" 

Daten in einigen Fällen auch in dieser gespeichert werden Format:

"1492213242000" 
  1. Warum gibt es so viele Zeitstempel-Formate?
  2. Was ist das bevorzugte Timestamp-Format für Firebase sollte ich verwenden?
  3. Wie konvertiere ich die Daten in den bevorzugten Zeitstempel mit Cloud-Funktionen?
+0

Ihr Leben wird stark vereinfacht, wenn Sie nur "Epoch Times" -Darstellung verwenden, die die Anzahl der Sekunden (oder Millisekunden) seit dem 1. Januar 1970 ist. Alles andere wird Ihnen Probleme verursachen, außer Sie haben ein besonderes Bedürfnis. –

Antwort

0

Das Objekt, das Sie in event.data erhalten, ist ein admin.auth.UserRecord. Seine Schnittstelle gibt an, dass die createdAt und lastSignedInAt Zeitstempel JavaScript Date Objekte sein sollen.

Der Date Typ hat genug issues, dass wir versuchen, es in neueren Schnittstellen zu vermeiden. Ich vermute, dass Sie möglicherweise einige dieser Schwachstellen in der inkonsistenten toString() Serialisierung treffen.

Ich stimme Doug, dass für die Speicherung, Millisekunden seit der Epoche sollte das bevorzugte Format sein. Sie sollten das zum Beispiel von createdAt.value bekommen können.

Verwandte Themen