首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Firebase函数--如何获得上传文件的用户?

Firebase函数--如何获得上传文件的用户?
EN

Stack Overflow用户
提问于 2018-12-11 11:55:21
回答 2查看 1.4K关注 0票数 1

我有一个管理网站,上传文件到一个特定的文件夹在Firebase存储。

从存储云函数中,我需要从上传文件的用户那里获得经过身份验证的userId。我需要这样做,因为当用户上传文件时,云功能启动,做一些处理,并将信息保存在实时数据库中,在实时数据库中,我需要保存上传操作的负责用户。

我看到从实时数据库云函数中获取用户很简单(使用context.auth.uid),但我没有找到任何类似于存储云函数的解决方案。

有可能吗?

Tks。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-11 14:06:16

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

来自这里文档:

代码语言:javascript
复制
var metadata = {
  customMetadata: {
    'location': 'Yosemite, CA, USA',
    'activity': 'Hiking'
  }
}

然后,您可以在文件上使用getMetadata (文档这里)检索它的信息,或者像下面的触发器函数中的那样获取customMetadata

例如,在我的iOS应用程序中,我创建了一个StorageMetadata,并将customMetadata设置为["user":"userID_AZERRRRR"]

在我的节点js函数中,我开发了如下触发器函数:

代码语言:javascript
复制
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 info testStorageOnFinalize 元数据用户userID_AZERRRRR

风险

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

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

代码语言:javascript
复制
// Allow reads if a certain metadata field matches a desired value
allow read: if resource.metadata.user == request.auth.uid;

您可以检查存储规则这里

票数 1
EN

Stack Overflow用户

发布于 2019-06-25 20:33:27

我想我应该提供工作代码,因为阿里·阿巴斯的回答并不完全正确。

上传期间将自定义元数据添加到文件中。您必须使用customMetadata string>string对象,如下所示。

代码语言:javascript
复制
firebase.storage().ref("/location/path").put(file, {customMetadata: {'uid': firebase.auth().currentUser.uid}})

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

代码语言:javascript
复制
allow write: if request.resource.metadata.uid == request.auth.uid

最后,从云函数中,以下内容将返回从文件的元数据中获取的uid:

代码语言:javascript
复制
object.metadata.uid

您可以确保这是上传文件的人的uid,因为除非您使用Admin,否则无法上传文件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53723687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档