Firebase onCreate()的云函数日期格式不正确

时间:2017-05-02 05:33:45

标签: firebase google-cloud-functions

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);
}

在上面的代码中,我将用户注册时保存到firebase数据库。现在除非我在他们不保存的日期使用toString方法。我进一步研究了这一点,发现日期不是字符串,而是导致一些问题。 (我使用console.log并检查firebase仪表板)

{ displayName: 'Test User',
  email: 'test@example.com',
  metadata: 
   { createdAt: 2017-05-02T05:18:45.000Z,
     lastSignedInAt: 2017-05-02T05:18:45.000Z }
}

当我使用toString方法时,虽然它将输出转换为:

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

日期也会以某种格式保存:

"1492213242000"
  1. 为什么有这么多时间戳格式?
  2. 我应该使用的firebase的首选时间戳格式是什么?
  3. 如何使用云功能将日期转换为首选时间戳?

1 个答案:

答案 0 :(得分:0)

您在event.data中收到的对象是admin.auth.UserRecord。其界面指定createdAtlastSignedInAt时间戳应为JavaScript Date个对象。

Date类型有足够的issues,我们会尝试在较新的界面中避免它。我怀疑你可能会在不一致的toString()序列化中遇到一些痛点。

我同意Doug的观点,对于存储,自纪元以来毫秒应该是首选格式。例如,你应该可以从createdAt.value获得它。