【问题标题】:Google Cloud function to read the document from Firestore secured with rulesGoogle Cloud 功能可从受规则保护的 Firestore 中读取文档
【发布时间】:2020-01-22 21:31:55
【问题描述】:

我是 Cloud Functions 的新手。

我有一个 Android 应用,它通过可调用客户端调用 Cloud Function,Cloud Function(node.js/typescript) 调用 Firestore 来读取数据。

云功能代码:

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';

admin.initializeApp({credential : admin.credential.applicationDefault()});
exports.queryForData = functions.https.onCall((dats, context) => {
admin.firestore().collection('mydocument').get()
        .then(snapshot => {
                snapshot.forEach( e => {
                    if(e.exists)
                    {
                    console.log("docs="+e.ref.path);
                    return {"data":e.data()};
                    }
                    else{
                        console.log("No docs!!!!!")
                        return {"data":"empty"}
                    }
                })

            })
        .catch(error => {
            console.log("error occurred"+error);
            return {error:error};
        });
    });

当我的 Android 应用调用此函数时,我收到一条被 catch 块显示的错误消息:ERROR: Could not load the default credential 并要求检查 Google Cloud Service Key 设置 URL,并且我已设置环境变量 GOOGLE_APPLICATION_CREDENTIALS 指向下载的 JSON 文件。

我试过initializeApp没有参数,有applicationDefaultfunctions.config().firebase的凭证

我已经放置了控制台日志来查看函数是否被调用并接收到 HTTP 调用,是的,它被调用了。但似乎问题出在我尝试获取收藏时。

Firestore 规则允许经过身份验证的用户读取文档。

我已经浏览了视频教程和之前在这里提出的问题,但似乎没有一个可以解决我的问题。

非常感谢任何帮助。

【问题讨论】:

    标签: android node.js firebase google-cloud-firestore google-cloud-functions


    【解决方案1】:

    我使用 .json 服务帐户文件进行初始化。您可以从 Firebase 控制台生成它。

    我的初始化看起来像这样

    const functions = require('firebase-functions');
    const admin = require("firebase-admin");
    const serviceAccount = require("./key.json");
    
    const databaseURL = "https://xyz-prod.firebaseio.com";
    
    admin.initializeApp({
      credential: admin.credential.cert(serviceAccount),
      databaseURL
    });
    
    const db = admin.firestore()
    const itemsRef = db.collection("items")
    

    【讨论】:

    • 我可以从哪里获得数据库 url?对于firestore数据库(我正在使用)我找不到它。我认为db url仅适用于实时数据库?
    • 此示例适用于 Firestore。格式为'https://<DATABASE_NAME>.firebaseio.com' 这是完整的文档:firebase.google.com/docs/admin/setup#initialize_the_sdk
    • 我创建了另一个(新)谷歌默认服务帐户密钥并下载了 JSON 文件并设置了环境变量,现在我可以使用上面发布的相同代码连接并获取数据问题。
    猜你喜欢
    • 2018-06-03
    • 2020-03-21
    • 2021-07-10
    • 2018-09-01
    • 1970-01-01
    • 2019-03-12
    • 2018-10-01
    • 1970-01-01
    • 2021-12-11
    相关资源
    最近更新 更多