【问题标题】:Firebase client side UID and Firebase function UID do not matchFirebase 客户端 UID 和 Firebase 函数 UID 不匹配
【发布时间】:2018-09-11 22:07:11
【问题描述】:

我正在尝试将 Stripe 与 Firebase 一起使用,并遵循链接的 Firestripe example project。当用户注册应用程序时,会在 Firebase 中触发以下函数,该函数会在 Stripe 中创建一个 Customer 对象。

exports.createStripeCustomer = functions.auth.user().onCreate(event => {
  const data = event.data;
  return stripe.customers.create({
  }).then(customer => {
    return admin.database().ref(`/stripe_customers/${data.uid}/customer_id`).set(customer.id);
  });
});

上述函数的最后一行应该将 Stripe 客户 ID 作为 Firebase UID 的子项写入数据库中,它成功完成了。

现在在客户端 (iOS - Swift) 上,当尝试通过使用以下方式获取其 UID 来写入同一经过身份验证的用户时:

let userID = Auth.auth().currentUser!.uid
Database.database().reference(fromURL: "https://REDACTED.firebaseio.com/").child("stripe_customers").child(uid).child("sources").setValue([
                    "token": token.tokenId,
                    ])

它在/stripe_customers/ 下创建了一个完全不同的孩子,这意味着 UID 不匹配...... 如何继续从客户端获取用户的真实 UID?还是我做错了什么?任何帮助或见解将不胜感激。

【问题讨论】:

    标签: ios swift firebase firebase-realtime-database stripe-payments


    【解决方案1】:

    您在第一个代码示例中所做的是将数据存储在 Stripe 客户 ID 下,而在第二个代码示例中,您尝试根据您的 Firebase UID 检索数据。

    您要做的是存储名为 Firebase UID 的用户对象,然后将您的 Stripe ID 存储在子对象中。最后,查询您的 Firebase UID 对象而不是其 Stripe ID 子对象。

    此外,我看不到您使用您的let userID = Auth.auth().currentUser!.uid 查询中的任何位置。如果您声明了一个未用于示例的常量,最好将其省略。

    如果您需要更多帮助,请告诉我。

    另外,看看 Firebase 的新 Cloud Firestore。 它仍处于测试阶段,但与 Firebase 实时数据库相比,它非常强大。

    【讨论】:

    • 我认为这不是问题所在。在调用 let userID = Auth.auth().currentUser!.uid 之前添加延迟客户端返回的 ID 与 Firebase 函数中的 ID 相同,这似乎解决了我的问题。
    猜你喜欢
    • 2018-04-08
    • 2016-11-19
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 2020-02-01
    • 1970-01-01
    相关资源
    最近更新 更多