Firestore自定义声明未更新UI

时间:2020-02-27 13:41:47

标签: javascript firebase google-cloud-firestore firebase-security

我使用新用户注册时创建的自定义声明来保护自己的路线。

allow read, write: if resource.data.ownerId == request.auth.uid;

但是,当新用户注册时,它不会更新UI的自定义声明!这意味着新用户必须先注销然后重新登录,才能访问内容,这真是残酷的体验。

firebase团队在文档中表示,他们可以通过以下方式强制进行UI更新:

const metadataRef = admin.database().ref("metadata/" + user.uid);
return metadataRef.set({refreshTime: new Date().getTime()});

https://firebase.google.com/docs/auth/admin/custom-claims

我在前端/后端都遵循了代码,但是我发现这段代码仅适用于实时数据库,不支持firestore 。在文档中没有代码强制UI用firestore更新-我的所有尝试均失败。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

要在JavaScript 客户端中刷新令牌,请执行以下操作:

user.getIdToken(true)

如果您的客户端在其他平台上运行,则对所有其他平台都有等效的调用。但是无论使用哪种平台,您都需要进行此调用以刷新用户的令牌,以便获取新的/更新的声明。

执行此操作完全独立于Firebase的任何其他功能,因此它不依赖于实时数据库或Firestore。


您共享的JavaScript代码不会刷新客户端中的自定义声明,而是要在设置自定义声明的受信任环境中运行。该代码仅在上次更新用户配置文件时在实时数据库中标记。

然后,您将在客户端上运行另一段代码,以侦听此数据库值,并在数据库标志更改时强制客户端刷新用户的ID令牌。

该代码位于您在Client side implementation (JavaScript)下共享的同一文档页面中。