我正在编写一个简单的云函数,当创建新用户时,该函数应使用特定名称在特定集合中创建一个新文档。我尝试了各种编码方法,并且我想出了我认为最接近有效代码的代码,因为我一个人就能得到。这是有问题的代码:
var functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.emailUserRegistration = functions.auth.user().onCreate((user) => {
admin.firestore().collection('UnauthenticatedUsers').doc(user.email).get()
.then(snapshot => {
var userObject = {
Email: user.email,
First_Name: snapshot.data().First_Name,
Last_Name:snapshot.data().Last_Name,
Password:snapshot.data().Password,
Phone_Number:snapshot.data().Phone_Number,
Address:snapshot.data().Address
};
return admin.firestore().collection('Users').doc(user.uid).set(userObject);
})
.catch(error => {
//Handle the error
console.log('[YAX]',error)
})
});
并且发生的问题如下:
1)返回的函数是不确定的,并且期望Promise或值。我不明白为什么在set方法返回Promise时会出现问题。根据我看过的各种教程(包括Firebase的官方YouTube频道和其他独立程序员的YouTubers),如果函数返回Promise,则可以简单地返回该函数。
2)TypeError:无法读取未定义的属性“ First_Name”。我完全不知道为什么当我实际上将其作为快照.data()之后的可能变量时,代码无法读取“ First_Name”。在Visual Studio代码中。
3)标题中没有提到,但是由于上述两个错误,由于某种原因,函数执行返回状态为“ ok”。
我是一名初学者Android开发人员,使用Cloud Functions是我从Firebase客户支持处获得的建议和解决方案,但是在询问他们这个特定问题后,他们还没有回复我。请记住,我是Node.js的初学者(在此项目之前,我从未做过任何事情),除了希望我的代码能够正常工作之外,我绝对想知道这里发生的事情,或者更简单术语我想了解代码执行了什么功能以及为什么它不执行我的逻辑要求的功能。
有谁需要更多背景信息,我会很乐意提供。
最佳答案
您第一个问题的答案
var functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.emailUserRegistration = functions.auth.user().onCreate((user) => {
// return this function
return admin.firestore().collection('UnauthenticatedUsers').doc(user.email).get()
.then(snapshot => {
var userObject = {
Email: user.email,
First_Name: snapshot.data().First_Name,
Last_Name:snapshot.data().Last_Name,
Password:snapshot.data().Password,
Phone_Number:snapshot.data().Phone_Number,
Address:snapshot.data().Address
};
return admin.firestore().collection('Users').doc(user.uid).set(userObject);
})
.catch(error => {
//Handle the error
console.log('[YAX]',error)
})
});
您第二个问题的答案
最好上传UnauthenticatedUsers文档的图片。
First_Name: snapshot.data().First_Name // this should be same as in your document and it is case sensitive also please check with your document.
希望对你有帮助......