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

时间:2019-09-02 15:00:51

标签: html typescript firebase google-cloud-firestore google-cloud-functions

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

functions-> src-> index.ts

// Sends email to user after signup
export { welcomeEmail } from './send_email';
// Saves user after signup
export { createUserDoc } from './save_user';

functions-> src-> save_user.ts

// 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中找到一个相应的用户文档,并在云存储中找到一个个人资料图片。

相反,我得到:

“用户记录”类型上不存在属性“数据”。ts(2339)

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

我们将不胜感激。谢谢

1 个答案:

答案 0 :(得分:2)

正如您将在documentation中的onCreate方法中看到的那样,处理程序函数的第一个参数是一个UserRecord,它没有data属性。 / p>

因此,您遇到的第一个错误是正常的。

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


对于第二个错误,您可以看看https://stackoverflow.com/a/43122423/3371862How to resolve 'Build:'Promise' only refers to a type, but is being used as a value here.'

相关问题