Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 生成用于存储的下载URL_Node.js_Firebase_Google Cloud Functions_Firebase Storage - Fatal编程技术网

Node.js 生成用于存储的下载URL

Node.js 生成用于存储的下载URL,node.js,firebase,google-cloud-functions,firebase-storage,Node.js,Firebase,Google Cloud Functions,Firebase Storage,我有几个关于firebase存储的问题 我正在使用和管理员帐户(具有自定义声明)为firebase存储对象生成下载URL,并将URL存储在Firestore上 用户可以读取Firestore文档以获取URL,而无需在客户端代码上调用getDownloadUrl Q1)我注意到在存储URL的末尾有一个令牌。这是否特定于我的管理员帐户,并且现在没有管理员用户可以读取此令牌是否安全 问题2)此外,如果在同一存储路径上调用getDownloadUrl的非管理员用户会收到与管理员帐户相同的URL还是不同的

我有几个关于firebase存储的问题

我正在使用和管理员帐户(具有自定义声明)为firebase存储对象生成下载URL,并将URL存储在Firestore上

用户可以读取Firestore文档以获取URL,而无需在客户端代码上调用getDownloadUrl

Q1)我注意到在存储URL的末尾有一个令牌。这是否特定于我的管理员帐户,并且现在没有管理员用户可以读取此令牌是否安全

问题2)此外,如果在同一存储路径上调用getDownloadUrl的非管理员用户会收到与管理员帐户相同的URL还是不同的URL

问题3)如果我切换到在客户端使用getDownloadUrl,这会增加我在使用firebase存储时的成本吗

Q4)如果我按URL缓存内容,并且URL发生更改,则它将重新下载,而不使用缓存。。这些下载链接是唯一的还是getDownloadURL可以在后续调用中返回不同的URL

非常感谢

编辑---

对不起,我还有一个问题

问题5)要移动firebase存储上的文件,我目前将它们下载到本地pc上,然后重新加载到另一个位置,这似乎效率很低

我发现有人在使用file.move()

这是否可以调用firebase函数(因为他们在评论中谈到存储规则是一个问题,尽管它是从2016年开始的),如果可以,这将比我的手动下载和上传更便宜

抱歉问了这么多问题:)

1)我注意到在存储URL的末尾有一个令牌。这是否特定于我的管理员帐户,并且现在没有管理员用户可以读取此令牌是否安全

取决于您目前拥有什么,因为您可以将自定义身份验证与Firebase集成,这将允许您创建自定义令牌,用于在客户端应用程序上登录Firebase身份验证服务,并采用令牌声明中描述的身份。这可用于访问其他Firebase服务,如云存储等。 通常,您的服务器应该创建具有唯一标识符的自定义令牌

2) 此外,如果非管理员用户在同一存储路径上调用getDownloadUrl,他们会收到与管理员帐户相同的URL还是不同的URL

取决于您如何设置getDownloadUrl的权限。如果您有一个自定义的实例,它们可以接收不同的实例,但通常它会返回一个指向当前引用的新实例

3) 如果我切换到在客户端使用getDownloadUrl,这会增加使用firebase存储的成本吗

我不确定这一点,我已经检查了文档,没有任何东西会表明这个特定方法的配额或定价,所以我会继续,并假设它不会这样做,但我可能在这一点上是错误的

4) 如果我按URL缓存内容,并且URL发生更改,它将重新下载而不使用缓存。。这些下载链接是唯一的还是getDownloadURL可以在后续调用中返回不同的URL

如前所述,它返回一个指向当前引用的新实例,因此这些下载链接是唯一的

5) 要移动firebase存储上的文件,我目前将它们下载到本地pc上,然后将它们重新加载到另一个位置,这似乎效率很低

对于这个问题以及您最初帖子的最后一部分,我建议您创建一份支持通知单,并向Firebase支持团队询问更多细节,您可以从中获得更多有关此问题的信息,因为这比StackOverflow更适合他们。()

Q1)我注意到在存储URL的末尾有一个令牌。这是否特定于我的管理员帐户,并且现在没有管理员用户可以读取此令牌是否安全

此令牌是为此特定文件生成的随机ID。它不会更改,除非您有意更改它(您可以从Firebase控制台“撤销”令牌,这将用新令牌替换它)。拥有URL的每个人都可以查看文件,无论他们是否经过身份验证。然而,URL“很难猜测”,所以除非你与任何人共享,否则实际上它将保密

Q2)此外,如果在同一存储路径上调用getDownloadUrl的非管理员用户会收到与管理员帐户相同的URL还是不同的URL

返回的URL将始终相同,除非在Firebase控制台中使其无效。如果不希望客户端对文件调用getDownloadURL,请添加拒绝读取的存储安全规则:

match /path/to/{file} {
  allow read: if false;

  // Or, if only authed users should be able to call getDownloadURL:
  allow read: if request.auth != null;
}
Q3)如果我切换到在客户端使用getDownloadUrl,这会增加我在使用firebase存储时的成本吗

调用getDownloadUrl()确实会利用一些您必须付费的Google云资源,无论您是在服务器端还是在客户端。这是一个“B级”操作(查看谷歌云定价),还有一点数据传输

Q4)如果我按URL缓存内容,并且URL发生更改,则它将重新下载而不使用缓存。。这些下载链接是唯一的还是getDownloadURL可以在后续调用中返回不同的URL

每次都返回相同的URL,除非手动使令牌无效。(顺便说一句,设置
缓存控制
头的缓存策略在上载对象时设置为元数据。)

Q5)要移动firebase存储上的文件,我目前将它们下载到本地pc并重新加载到另一个位置,这似乎效率很低。[…]这是否可以调用firebase函数


是的,您可以在Firebase云函数中移动文件。Firebase管理员SDK绕过安全规则。

这非常有用。谢谢你的回答。。。我不知道gcp定价页面,只使用了firebase定价页面。。你知道吗