Node.js 生成用于存储的下载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,请添加拒绝读取的存储安全规则: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还是不同的
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定价页面。。你知道吗