我在注册新帐户时收到此错误。我使用的代码:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.afterRegFunction = functions.auth.user().onCreate((user) => {
var randInt = (Math.floor(Math.random() * 8) + 1);
var userObject = {
u_n : user.uid, // user nickname
u_n_c : admin.database.ServerValue.TIMESTAMP, // next date to change nick
u_a : randInt.toString(), // user avatar
u_a_c : admin.database.ServerValue.TIMESTAMP, // next date to change avatar
d : admin.database.ServerValue.TIMESTAMP, // date the account was created
u_p : 0 // user points
};
admin.database().ref('userInfo/' + user.uid).set(userObject);
admin.database().ref('nicknames/' + user.uid).set(user.uid);
});
我的函数已完成,日志中的状态为“错误”,并且数据库中没有添加任何内容。
最佳答案
您忽略了 set() 返回的 promise ,它是异步的。使用 Cloud Functions 后台类型函数,您有义务返回一个仅在所有异步工作完成后才解决的 promise 。由于您有两项工作,因此您将需要一个新的 Promise,该 Promise 在这两项工作都解决后才能解决。
首先,您应该阅读有关终止函数的文档,以及 watch the video series了解如何处理 Cloud Functions 中的 promise ,以便您了解需要做什么。
然后,您会意识到需要执行以下操作:
const p1 = admin.database().ref('userInfo/' + user.uid).set(userObject);
const p2 = admin.database().ref('nicknames/' + user.uid).set(user.uid);
return Promise.all([p1, p2]);
此外,对于 Cloud Functions,您应该像这样不带参数地初始化 Admin SDK:
admin.initializeApp();
您现在的做法已被弃用。
关于node.js - 使用 auth.user().onCreate 时无法读取未定义的属性 'uid',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53947166/