无法访问Firebase中集合中的特定字段

时间:2019-12-03 14:09:53

标签: javascript firebase flutter google-cloud-firestore google-cloud-functions

在编写Cloud Function时,我试图访问集合Email中的cards字段。在Firebase中,我创建了一个新用户并从该用户登录,并使用FirebaseAuth.instance.currentUser()将该用户的电子邮件地址保存到Firebase数据库中,并创建了文档名称.document(user.uid),现在我正在访问此用户ID。这段代码中的node.js

const snapshot=await firestore.collection('cards').doc(context.params.userId).get();
const customerEmailaddress= snapshot.data().Email;

但是我无法使用该代码访问该电子邮件。 颤动的应用程序代码是将数据保存到Firebase数据库中的

    class PaymentServices{
  addCard(token){
    FirebaseAuth.instance.currentUser().then((user){
      Firestore.instance
          .collection('cards')
            .document(user.uid)
          .collection('tokens').add({
      'tokenid': token.tokenId,
      'Email': user.email,
      'customerid': 'new'
      }).then((val){

      });
      print("saveedd");
    });
  }
}

云功能 数据已成功插入Firebase中,我只想从Firebase中访问数据并将值存储在诸如customerEmailaddress之类的变量中

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const firestore= admin.firestore();
const stripe = require('stripe')('sk_test_.........');
exports.StripeSource =functions.firestore.document('cards/{userid}/tokens/{tokenid}').onCreate(async (tokenSnap,context) => {
var customerdata;
const data=tokenSnap.after.data();

const snapshot=await firestore.collection('cards').doc(context.params.userId).get();
const customerEmailaddress= snapshot.data().Email;
const customerid= snapshot.data().custid;
 customerdata = await stripe.customers.create({
  email: customerEmailaddress,
})
});

简单示例 user.id的情况可能有问题,但是此代码也无法从快照变量的Firebase中获取数据

 exports.StripeSource =functions.firestore.document('data/{card}/tokens/{tokenid}').onCreate(async (tokenSnap,context) => {
      const snapshot = await firestore.collection('data').doc('card').get();
      const customerEmailaddress= snapshot.data().Email;
        const customer =  stripe.customers.create({
            email: customerEmailaddress,
          })
          .then((customer) => {  
                    return stripe.customers.createSource(customer.id, {
                      source: 'tok_visa',
                    });
      }) 
      });

1 个答案:

答案 0 :(得分:1)

您确定要阅读的文档是否存在于所需ID下的“卡片”中?在Firebase控制台上进行检查。

因为我认为您的保存数据代码中有一个错误:add()直接用于集合,所以您插入具有随机生成ID的文档。但是您具有ID,因此应在特定文档上使用setData()

插入具有随机ID的新文档:

Firestore.instance.collection('cards').add({'Email': user.email});

插入具有已知ID(user.uid)的新文档:

Firestore.instance.collection('cards').document(user.uid).setData({'Email': user.email});