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

标签 node.js firebase firebase-authentication google-cloud-functions

我在注册新帐户时收到此错误。我使用的代码:

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/

相关文章:

javascript - 如何使用 AngularFire Storage 知道上传何时完成

facebook - flutter_auth 要求 facebook 登录的访问 token 是什么?

firebase - flutter 灭火焰中的空方法调用 setter/getter uid

javascript - Mongoose版本错误: No matching document found for id when document is being saved

node.js - 我该如何解决 npm 错误! js错误:0909006C:PEM in Node.?

javascript - 将方法动态链接到 javascript 函数

firebase - Google Firebase - GDPR - 欧盟

node.js - 当没有提供选项时 npm uninstall 会做什么

javascript - Socket.IO 在本地工作,但不在外部工作

Polymer 入门套件的 Firebase 身份验证错误