Firebase 触发的云功能不知道用户

问题描述 投票:0回答:1

我已将支付系统集成到我的 Firebase 应用程序中,并且他们的系统向我的后端发送 POST 请求。我按如下方式处理该请求:

app.post("/subscription", (req, res) => {
  const {data, signature} = req.body;
  const decodedJson = JSON.parse(Buffer.from(data, "base64"));
  return admin
      .firestore()
      .collection("subscriptions")
      .doc(decodedJson.order_id)
      .set({
        subscriptionDate: admin.firestore.FieldValue.serverTimestamp()})
      .then(() => {
        return res.status(200).send("Subscription created");
      })
      .catch((error) => {
        throw new Error(error);
      });
});

然后我有另一个函数,每当在“订阅”集合下创建新文档时就会触发该函数:

exports.checkPaymentStatus = functions.firestore
    .document("subscriptions/{subscriptionId}")
    .onCreate((snap, context) => {
        return axios.post("https://paymentsystem.com/api/1/get-status", {
          data: dataParam,
          signature: signature,
        })
        .then((response) => {
          if (response.data.status === "success") {
            const batch = admin.firestore().batch();

            batch.update(admin.firestore().collection("subscriptions")
            .doc(snap.id), {subscriberId: context.auth.uid});

            batch.update(admin.firestore().collection("users")
            .doc(context.auth.uid), {
              isPro: true,
              subscribedDate: admin.firestore.FieldValue.serverTimestamp(),
            });
            }
          })
        .catch((error) => {
          console.error("Error occurred:", error);
          });
      });

但是,它给出错误“发生错误:TypeError:无法读取未定义的属性(读取'uid')”。这是由于 context.auth.uid 变量造成的。我该如何解决这个问题?

我尝试更新用户文档的字段值。但是,我需要访问用户文档。

node.js firebase express google-cloud-platform google-cloud-functions
1个回答
0
投票

如果我很好地理解了您的情况,上下文是 Firestore 文档实例,而不是 Firebase 身份验证用户。因此,要访问文档的 id,您必须执行

context.id
而不是
context.auth.uid

© www.soinside.com 2019 - 2024. All rights reserved.