使用firestore的云功能无法找到任何数据

时间:2018-05-28 18:22:52

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

我是js和firestore(以及整个firebase生态系统)的新手

我想在2个字段(account_id,device_id)中查询数据,但我总是得到"找不到文档"

let selectQuery = admin.firestore().collection("devices");
    selectQuery.where("account_id", "==", context.auth.uid);
    selectQuery.where("device_id", "==", deviceId);

    selectQuery.get().then(function(doc) {
        if (doc.exists) {
            console.log("Document data:", doc.data());
        } else {
            // doc.data() will be undefined in this case
            console.log("No such document!");
        }
        return "asd";
    }).catch(function(error) {
        console.log("Error getting document:", error);
    });

我甚至尝试删除where子句但是数据仍然无法找到但是它在那里:

enter image description here

来自上下文和数据的参数是 // UID = UIDwFK2JVghw8XjVGqlEE0Uj09irGK2 // DEVICE_ID = 552cbe50f935de7a

这里的请求是完整的代码:

exports.authDevice = functions.https.onCall((data, context) => {
    if (!context.auth) {
        // Throwing an HttpsError so that the client gets the error details.
        throw new functions.https.HttpsError('failed-precondition', 'The function must be called ' +
            'while authenticated.');
    }

    const deviceName = data.device_name;
    const deviceId = data.device_id;
    const isQR = data.is_qr;
    const uid = context.auth.uid;

    console.log("DEVICE NAME: " + deviceName);
    console.log("DEVICE ID: " + deviceId);
    console.log("is QR: " + isQR);
    console.log("UID: " + uid);

    admin.firestore().collection("devices")
        .where("account_id", "==", context.auth.uid)
        .where("device_id", "==", deviceId)
        .get().then(function(doc) {
        if (doc.exists) {
            console.log("Document data:", doc.data());
        } else {
            // doc.data() will be undefined in this case
            console.log("No such document!");
        }
        return "asd";
    }).catch(function(error) {
        console.log("Error getting document:", error);
    });
});

2 个答案:

答案 0 :(得分:3)

经过一些调试后,我发现它不会返回单个文件,而是一个" QUERY SNAPSHOT"方法为空或大小。

改变之后:

get_all

答案 1 :(得分:1)

context.auth仅适用于实时数据库触发的功能。来自documentation for the EventContext.auth parameter

  

触发该功能的用户的身份验证信息。此对象包含经过身份验证的用户的uid和token属性。有关包括令牌密钥的更多详细信息,请参阅安全规则参考。

     

对于未经身份验证的用户,此字段为null对于不提供用户信息的事件类型(除实时数据库之外的所有事件)或Firebase管理员用户,此字段将不存在。