Typescript 云函数auth onCreate触发器将用户添加到firestore
当用户通过GoogleAuth注册时,我试图向firestore添加一个用户对象。这是我的密码:Typescript 云函数auth onCreate触发器将用户添加到firestore,typescript,firebase,firebase-authentication,google-cloud-functions,google-cloud-firestore,Typescript,Firebase,Firebase Authentication,Google Cloud Functions,Google Cloud Firestore,当用户通过GoogleAuth注册时,我试图向firestore添加一个用户对象。这是我的密码: export const accountCreate = functions.auth.user().onCreate(user => { console.log(user.data); admin.firestore().collection('users').doc(user.data.uid).set(user.data).then(writeResult => {
export const accountCreate = functions.auth.user().onCreate(user => {
console.log(user.data);
admin.firestore().collection('users').doc(user.data.uid).set(user.data).then(writeResult => {
console.log('User Created result:', writeResult);
return;
}).catch(err => {
console.log(err);
return;
});
});
不走运,我只是不断出错:
错误:无法将类型([object])编码为Firestore值
在Function.encodeValue(/user\u code/node\u modules/firebase admin/node\u modules/@google cloud/firestore/src/document.js:773:11)
我不知道这为什么不起作用。有什么想法吗?
感谢
用户。数据
不是有效的云Firestore文档,因此Firestore拒绝写入。相反,您应该设置您关心的特定字段,例如:
export const accountCreate = functions.auth.user().onCreate(user => {
console.log(user.data);
userDoc = {'email' = user.data.email,
'displayName' = user.data.displayName}
admin.firestore().collection('users').doc(user.data.uid)
.set(userDoc).then(writeResult => {
console.log('User Created result:', writeResult);
return;
}).catch(err => {
console.log(err);
return;
});
});
根据Dans的回答,可以将
UserRecord
序列化,并将所有内容放入文档中,而无需考虑您:
完整的工作示例:
import * as functions from 'firebase-functions';
const admin = require('firebase-admin');
admin.initializeApp({
databaseURL: 'https://challenges-f9f6b.firebaseio.com'
});
export const addUser = functions.auth.user().onCreate((user) => {
return admin
.firestore()
.collection('users')
.doc(user.uid)
.set(JSON.parse(JSON.stringify(user)));
});