我正在尝试将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?或者我做错了什么?任何帮助或见解将不胜感激。
答案 0 :(得分:0)
您在第一个代码示例中执行的操作是在条带客户ID下存储数据,而在第二个代码示例中,您尝试根据Firebase UID检索数据。
您要做的是存储名为Firebase UID的用户对象,然后将条带ID存储在子对象中。最后,查询您的Firebase UID对象而不是其Stripe ID子对象。
此外,我看不到您使用let userID = Auth.auth().currentUser!.uid
您查询中的任何位置。如果你声明一个你没有用于你的例子的常量,最好把它留下来。
如果您需要更多帮助,请与我联系。
另外,请查看Firebase的新Cloud Firestore。 它仍处于测试阶段,但与Firebase实时数据库相比,它的功能非常强大。