使用 auth.user().onCreate 时无法读取未定义的属性'uid'



注册新帐户时出现此错误。我使用的代码:

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() 返回的承诺,它是异步的。 使用云函数后台类型函数,您必须返回仅在所有异步工作完成后解析的承诺。 由于您有两项工作,因此您将需要一个新的承诺,当它们都得到解决时,该承诺就会得到解决。

首先,您应该阅读有关终止函数的文档,并观看有关如何在云函数中处理承诺的视频系列,以便了解您需要做什么。

然后,您将意识到需要执行以下操作:

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]);

同样对于云函数,您应该像这样初始化没有参数的管理 SDK:

admin.initializeApp();

您现在的做法已被弃用。

相关内容

  • 没有找到相关文章

最新更新