【问题标题】:Firebase user authentication trigger that writes to realtime database写入实时数据库的 Firebase 用户身份验证触发器
【发布时间】:2018-11-14 22:51:36
【问题描述】:
exports.setupDefaultPullups = functions.auth.user()
    .onCreate(
        async (user) => {
            const dbRef= functions.database.ref;
            let vl= await (dbRef.once('value').then( (snapshot) => {
                return snapshot.ref.child('userInfo/'+user.uid).set(18);
            }));
            return vl;
        }
    );

我正在尝试在 Firebase 中为新用户编写一些初始设置的触发器。但是,上面的代码不起作用。它有什么问题? 基本上,在注册新用户时,我想使用上述路径将他/她的属性“defaultPullUps”设置为 18。

编辑:我很抱歉没有提供细节。最初,“async”关键字存在问题,已通过更新 node.js 引擎修复。现在,根据我如何调整代码,我会收到各种错误消息。有时它会说“...不是函数”。

编辑':虽然我同意我的问题没有达到标准,但它有一个价值:在 Firebase 身份验证触发器的在线文档中,未显示如何访问“主”数据库https://firebase.google.com/docs/functions/auth-events

编辑'':这是整个消息:

TypeError: Cannot read property 'child' of undefined
at exports.setupDefaultPullups.functions.auth.user.onCreate.user (/srv/index.js:15:36)
at cloudFunctionNewSignature (/srv/node_modules/firebase-functions/lib/cloud-functions.js:105:23)
at /worker/worker.js:756:24
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:228:7)

【问题讨论】:

  • 您在假设 async 关键字有问题之前问了这个问题。这一次,您仍然没有真正帮助我们了解问题所在。有错误信息吗?您究竟观察到什么与您的预期不同?
  • 您应该提供完整的错误消息,以表明问题的一些迹象。如果您不理解,请不要编辑该消息。
  • 我已经在应用程序中使用 Java 完成了它,但是看看如何编写逻辑服务器端仍然很有趣
  • 您没有在 Cloud Functions 中使用 Java。您正在使用 JavaScript。它们实际上是非常不同的语言。不要假设 API 是相同的。
  • 您的错误消息似乎与您显示的代码不匹配。您确定此处的代码与您部署到 Cloud Functions 的代码相同吗?

标签: javascript firebase firebase-realtime-database google-cloud-functions


【解决方案1】:

这行没有意义:

const dbRef= functions.database.ref;

如果您想在从其他来源(例如您的情况下为 Firebase 身份验证)触发的云函数中使用 Firebase 实时数据库,您可以使用 Firebase Admin SDK 来实现。

有关这方面的示例,请参阅 Get started with Cloud Functions 文档的 Initialize Firebase SDK for Cloud Functions 部分。具体来说,您需要导入并初始化使用:

// The Cloud Functions for Firebase SDK to create Cloud Functions and setup triggers.
const functions = require('firebase-functions');

// The Firebase Admin SDK to access the Firebase Realtime Database.
const admin = require('firebase-admin');
admin.initializeApp();

然后可以使用以下方法从您的函数中访问数据库:

const dbRef= admin.database().ref();

【讨论】:

    猜你喜欢
    • 2017-11-11
    • 2017-12-26
    • 2018-07-15
    • 2019-07-10
    • 1970-01-01
    • 2018-07-02
    • 2021-01-22
    • 1970-01-01
    • 2017-11-15
    相关资源
    最近更新 更多