node.js - 谷歌云函数中的 getSignedURL() 生成可以工作几天的链接,然后返回 "SignatureDoesNotMatch"

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

我的 Firebase 存储 getSignedUrl()下载链接工作几天,然后停止工作。错误信息是

SignatureDoesNotMatch
The request signature we calculated does not match the signature you provided. Check your Google secret key and signing method.

去年夏天有一个很长的discussion在 GitHub 上对此进行了说明,但我没有看到已达成解决方案。

我正在考虑使用 getDownloadURL()从前端而不是使用 getSignedUrl()从后端。是 getDownloadURL()不那么安全 getSignedUrl() ?

这是我的代码,大部分是从 documentation 复制的:

let audioType = 'mp3';
const {Storage} = require('@google-cloud/storage');
const storage = new Storage();
const bucket = storage.bucket('my-app.appspot.com');
var file = bucket.file('Audio/' + longLanguage + '/' + pronunciation + '/' + wordFileType);

  // Firebase Storage file options
  var options = {
    metadata: {
      contentType: 'audio/' + audioType,
      metadata: {
        audioType: audioType,
        longAccent: 'United_States',
        shortAccent: 'US',
        longLanguage: 'English',
        shortLanguage: 'en',
        source: 'Oxford Dictionaries',
        word: word
      }
    }
  };

  const config = {
    action: 'read',
    expires: '03-17-2025',
    content_type: 'audio/mp3'
  };

  function oedPromise() {
    return new Promise(function(resolve, reject) {
      http.get(oedAudioURL, function(response) {
        response.pipe(file.createWriteStream(options))
        .on('error', function(error) {
          console.error(error);
          reject(error);
        })
        .on('finish', function() {
          file.getSignedUrl(config, function(err, url) {
            if (err) {
              console.error(err);
              return;
            } else {
              resolve(url)
            }
          });
        });
      });
    });
  }

最佳答案

Google Cloud Storage 签名 URL 的最长持续时间为 7 天。但它也可以更短。再也不会了。我猜 Firebase 存储有相同的限制。

关于node.js - 谷歌云函数中的 getSignedURL() 生成可以工作几天的链接,然后返回 "SignatureDoesNotMatch",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55388061/

相关文章:

node.js - npm start 命令给出错误 : http-server:command not found , 代码:ELIFECYCLE

node.js - Cloudant 中的距离计算

node.js - Google Cloud Function/NodeJS - 从 JSON 表单事件中解析 int

ios - 在 firebase 下载/上传完成后继续

javascript - 如何在 React JS 中正确导入 firebase 模块来初始化App

android - 从适用于 Google Cloud Storage 的 Android 应用程序验证为服务帐户

javascript - 在 JavaScript 中存储/读取大型矩阵的最佳方式是什么?

Node.js 从 shell 管道读取后如何使用 stdin 流读取用户输入

java - 谷歌云数据流对压缩文件的处理发生变化

java - 如何在 Google Cloud Storage 中获取项目 ID