Html 在Firestore中为新的Firebase身份验证帐户创建用户数据
我想在Firestore中创建用户数据(姓名、电子邮件、电话号码)。这应该在创建经过身份验证的用户时触发 atHtml 在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
函数
->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
对于第二个错误,您可以查看或