火力地堡云功能 - 如何让用户将文件上载?(Firebase Cloud Functions - H

2019-09-29 00:24发布

我有一个管理网站,上传文件到火力地堡存储特定的文件夹。

从存储的云功能,我需要从上传文件的用户得到认证的用户ID。 我需要这个,因为,用户上传文件时,云功能启动时,做了一些处理,并保存信息的实时数据库,在那里我需要保存上传动作的负责用户。

我看到一个实时数据库云功能简单(使用context.auth.uid),其获得的用户,但我没有找到任何类似的解决方案,云存储功能。

可能吗?

韩国社交协会。

Answer 1:

您可以上传自定义元数据包含字符串属性的对象:

从技术文档在这里 :

var metadata = {
  customMetadata: {
    'location': 'Yosemite, CA, USA',
    'activity': 'Hiking'
  }
}

然后你可以使用getMetadata上的文件(DOC的位置 )来检索其信息或例如获得customMetadata像我下面的触发功能。

例如并且从我的iPhone应用程序,我创建一个StorageMetadata和予设定的customMetadata["user":"userID_AZERRRRR"]

在我的节点JS的功能,我开发这样的触发功能:

exports.testStorageOnFinalize = functions.storage.object().onFinalize(uploadedObject => {
    console.log('metadata keys', Object.keys(uploadedObject.metadata));
    console.log('metadata user', uploadedObject.metadata['user']);
})

在我的日志控制台:

3:00:20.140 PM信息testStorageOnFinalize 元数据用户userID_AZERRRRR

风险

从道格评论,这个解决方案不是完全安全的,因为元数据可能被伪造。

因此, 要解决这个问题 ,我们可以使用安全规则的存储,以检查用户是否等于识别的用户:

// Allow reads if a certain metadata field matches a desired value
allow read: if resource.metadata.user == request.auth.uid;

您可以查看存储的规则在这里



Answer 2:

我以为我会提供工作代码,阿里阿巴斯的答案是不完全正确。

在上传过程中添加自定义的元数据文件。 你必须使用customMetadata字符串> string对象,如下图所示。

firebase.storage().ref("/location/path").put(file, {customMetadata: {'uid': firebase.auth().currentUser.uid}})

接下来,我们需要验证所有上传的文件包含元数据,它是准确的。 这里有一个工作存储安全规则:

allow write: if request.resource.metadata.uid == request.auth.uid

最后,从云功能,下面就返回从文件的元数据所采取的UID:

object.metadata.uid

你可以肯定,这是谁上传的文件,因为他们不能没有它,除非你正在使用管理SDK上传者的UID。



文章来源: Firebase Cloud Functions - How to get user that uploads a file?