Html 在Firestore中为新的Firebase身份验证帐户创建用户数据

Html 在Firestore中为新的Firebase身份验证帐户创建用户数据,html,typescript,firebase,google-cloud-firestore,google-cloud-functions,Html,Typescript,Firebase,Google Cloud Firestore,Google Cloud Functions,我想在Firestore中创建用户数据(姓名、电子邮件、电话号码)。这应该在创建经过身份验证的用户时触发 at函数->src->index.ts // Sends email to user after signup export { welcomeEmail } from './send_email'; // Saves user after signup export { createUserDoc } from './save_user'; // Firebase Config impo

我想在Firestore中创建用户数据(姓名、电子邮件、电话号码)。这应该在创建经过身份验证的用户时触发

at
函数
->
src
->
index.ts

// Sends email to user after signup
export { welcomeEmail } from './send_email';
// Saves user after signup
export { createUserDoc } from './save_user';
// Firebase Config
import * as functions from "firebase-functions";
import * as firebase from "firebase-admin";
import {MD5} from "crypto-js";

export const createUserDoc = functions.auth.user().onCreate(event => {
    const firebaseUser = event.data;

    // Use gravatar as default if photoUrl isn't specified in user data
    let fileEnding = "jpg";
    let photoURL = `https://www.gravatar.com/avatar/${MD5(firebaseUser.email).toString().toLowerCase()}.jpg?s=1024&d=robohash`;
    if (firebaseUser.photoURL) {
        fileEnding = firebaseUser.photoURL.substr(firebaseUser.photoURL.lastIndexOf(".") + 1);
        photoURL = firebaseUser.photoURL;
    }

    const fileName = `users/${firebaseUser.uid}/profile.${fileEnding}`;
    const profilePhotoStorageOpts = {
        destination: fileName,
        metadata: {
            contentType: `image/${fileEnding}`
        }
    };

    const user = {
        name: firebaseUser.displayName || "No Name",
        email: firebaseUser.email,
        photoUrl: `gs://${firebase.storage().bucket().name}/${fileName}`
    };

    return Promise.all([
        firebase.storage().bucket().upload(photoURL, profilePhotoStorageOpts),
        firebase.firestore().collection("users").doc(firebaseUser.uid).set(user)
    ]);
});
at
功能
->
src
->
保存用户.ts

// Sends email to user after signup
export { welcomeEmail } from './send_email';
// Saves user after signup
export { createUserDoc } from './save_user';
// Firebase Config
import * as functions from "firebase-functions";
import * as firebase from "firebase-admin";
import {MD5} from "crypto-js";

export const createUserDoc = functions.auth.user().onCreate(event => {
    const firebaseUser = event.data;

    // Use gravatar as default if photoUrl isn't specified in user data
    let fileEnding = "jpg";
    let photoURL = `https://www.gravatar.com/avatar/${MD5(firebaseUser.email).toString().toLowerCase()}.jpg?s=1024&d=robohash`;
    if (firebaseUser.photoURL) {
        fileEnding = firebaseUser.photoURL.substr(firebaseUser.photoURL.lastIndexOf(".") + 1);
        photoURL = firebaseUser.photoURL;
    }

    const fileName = `users/${firebaseUser.uid}/profile.${fileEnding}`;
    const profilePhotoStorageOpts = {
        destination: fileName,
        metadata: {
            contentType: `image/${fileEnding}`
        }
    };

    const user = {
        name: firebaseUser.displayName || "No Name",
        email: firebaseUser.email,
        photoUrl: `gs://${firebase.storage().bucket().name}/${fileName}`
    };

    return Promise.all([
        firebase.storage().bucket().upload(photoURL, profilePhotoStorageOpts),
        firebase.firestore().collection("users").doc(firebaseUser.uid).set(user)
    ]);
});
目标是,对于每个创建的帐户,我现在可以在Firestore中找到一个对应的用户文档,在云存储中找到一个配置文件图像

相反,我得到的是:

类型“UserRecord”上不存在属性“data”。ts(2339)

“Promise”仅指类型,但在此处用作值。是否需要更改目标库?尝试将
lib
编译器选项更改为es2015或更高版本。ts(2585)

我们将不胜感激。感谢正如您将在中看到的那样,对于
onCreate
方法,处理程序函数的第一个参数是没有
数据属性的

所以你得到的第一个错误是正常的

在您的情况下,例如,如果您想要获取用户的
photoURL
,您应该执行
event.photoURL
(因为
event
的类型是
UserRecord
)。类似地,您将执行
event.uid
来获取用户的uid


对于第二个错误,您可以查看或

,您将在中看到对于
onCreate
方法,处理程序函数的第一个参数是没有
数据
属性的

所以你得到的第一个错误是正常的

在您的情况下,例如,如果您想要获取用户的
photoURL
,您应该执行
event.photoURL
(因为
event
的类型是
UserRecord
)。类似地,您将执行
event.uid
来获取用户的uid


对于第二个错误,您可以查看或