【问题标题】:Using Firebase parameters with Google Cloud Storage under node.js在 node.js 下将 Firebase 参数与 Google Cloud Storage 结合使用
【发布时间】:2016-10-06 08:16:21
【问题描述】:

目前没有 node.js Firebase 存储客户端(太糟糕了...),所以我使用 Firebase 控制台中的参数转向 gcloud-node。

我正在尝试:

var firebase = require('firebase');
var gcloud = require('gcloud')({
    keyFilename: process.env.FB_JSON_PATH,
    projectId: process.env.FB_PROJECT_ID
});

firebase.initializeApp({
    serviceAccount: process.env.FB_JSON_PATH,
    databaseURL: process.env.FB_DATABASE_URL
});

var fb = firebase.database().ref();

var gcs = gcloud.storage();

var bucket = gcs.bucket(process.env.FB_PROJECT_ID);

bucket.exists(function(err, exists) {
    console.log('err', err);
    console.log('exists', exists);
});

地点:

  • FB_JSON_PATH 是为使用 Firebase Server SDK 而生成的 JSON 文件的路径

  • FB_DATABASE_URL 类似于https://app-a36e5.firebaseio.com/

  • FB_PROJECT_ID 是 Google 控制台中 firebase 项目的名称:“app-a36e5”

存储桶的 ID 是 FB_PROJECT_ID(在 Firebase 的控制台中,存储选项卡显示 gs://app-a36e5.appspot.com)

当我运行这段代码时,我得到:

err null
exists false

但没有其他错误。

至少我期待exists true。

一些附加信息:我可以查询数据库(所以我认为 JSON 文件是正确的),并且我设置了如下存储规则:

service firebase.storage {
  match /b/app-a36e5.appspot.com/o {
    match /{allPaths=**} {
      allow read: if true;
      allow write: if request.auth != null;
    }
  }
}

这样存储上的所有内容都是可读的。

任何想法如何让它工作?谢谢。

【问题讨论】:

  • 嘿皮埃尔,你成功了吗?对这个有趣的问题给出一个正确的答案会很好。谢谢! (抱歉,我没有意识到这只有 56 分钟 - 让我们等待答案吧 :))
  • 也就是说,您的代码中存在第一个问题,您必须使用您的凭据调用gcloud.storage:gcloud.storage({ projectId: 'firebase-storage-id, keyFilename: 'service-account-json-path' });。 (我这样做了,但我仍然有一个 FORBIDDEN 错误)

标签: node.js google-cloud-storage gcloud-node firebase-storage


【解决方案1】:

这里的问题是您没有正确命名您的存储桶。桶初始化应该是:

var bucket = gcs.bucket('app-a36e5.appspot.com'); // full name of the bucket includes the .appspot.com

我假设process.env.FB_PROJECT_ID 只是your-bucket 部分,您需要获取完整的存储桶名称,而不仅仅是项目ID(尽管存储桶名称可能是process.env.FB_PROJECT_ID + '.appspot.com')。

另外,很抱歉没有提供与 Firebase 集成的存储 - GCS 有一个您已经找到的高质量库 (gcloud-node),我们认为这为开发人员提供了最好的故事(Firebase for mobile、Google用于服务器端开发的云平台),并且不想进一步混水。

【讨论】:

  • firebase 文档完美无瑕,从未有任何抱怨。另一方面,gcloud 文档非常混乱。像 Pierre 一样,我只是花了几个小时试图在 nodejs 中上传一个文件。使用 google firebase 时 gcloud 的正确值可能不清楚。例如,我仍然不知道指向文件的 URL ......一些例子(GCS)说它是https://www.googleapis.com/bucket/xxx,其他(firebase)说它的https://firebasestorage.googleapis.com/b/bucket/o/xxx......非常混乱......(对不起有点跑题了:))
  • +Pandaiolo 如果您可以将您对 gcloud-node 文档的不满转化为问题形式,很高兴听到您的反馈:github.com/googlecloudplatform/gcloud-common。首先,我在这里根据您的反馈创建了一个问题:github.com/GoogleCloudPlatform/gcloud-common/issues/141
  • 这是完成这项工作所需的唯一对上述代码的编辑吗?我正在为同样的问题而苦苦挣扎......并且我继续遇到错误
  • 这就是我过去通过 GCloud-Node 让 Firebase Storage 工作的方式:github.com/mcdonamp/flaming-specs/blob/master/function.js
猜你喜欢
  • 2014-11-05
  • 2021-02-21
  • 2016-03-30
  • 1970-01-01
  • 2014-08-26
  • 2013-11-29
  • 2018-12-09
  • 2017-09-19
  • 2015-06-15
相关资源
最近更新 更多