是否在安全规则中请求.auth.metadata



我有一个Firebase项目,我希望用户能够看到其他用户何时创建了他们的配置文件。我最初的希望是,我可以在前端使用"user.metadata.creationTime"将日期传递到用户的额外信息文档中,并通过将"request.resource.data.datecreated=request.auth.metadata.coreationTime"作为数据库规则来验证它是否正确,但根据文档,这似乎是不可能的。

有什么方法可以在后台验证创建日期是否正确?

更多信息编辑:以下是用户在我的个人资料上创建新帐户时触发的代码。这三个值将公开显示。我正在创建一个利基设备销售页面,这样在决定卖家是否粗略时,能够看到用户第一次创建帐户的时间可能会有所帮助。我不希望有人能让人觉得他们在这里的时间比以前长。

db.collection('users').doc(user.uid).set({
username: "Username-156135",
bio: "Add a bio",
created: user.metadata.creationTime
});

Firestore规则:

match /users/{id} {
allow get;
allow create, update: if request.resource.data.username is string &&
request.resource.data.bio is string &&
request.resource.data.created == request.auth.metadata.creationTime;
}

user.metadata.creationTime,根据API文档,是一个没有文档格式的字符串。我建议不要使用它。事实上,你试图做的似乎是不可能的,因为这个值在request.auth.的API文档中不可用

相反,我建议您使用带有云函数的Firebase Auth onCreate触发器,以当前时间作为适当的时间戳来自动创建该文档。然后,在安全规则中,我甚至不允许用户更改该字段,所以你可以确定它只是由触发器准确设置的。您可能对整个解决方案感兴趣。

最新更新