javascript - Firestore 自定义声明未更新 UI
问题描述
我正在使用新用户注册时创建的自定义声明来保护我的路线。
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 更新的代码 - 我的所有尝试都失败了。
有任何想法吗?
解决方案
要在 JavaScript客户端中刷新令牌,请执行以下操作:
user.getIdToken(true)
所有其他平台都有等效的调用,以防您的客户端在这些平台上运行。但无论平台如何,您都需要进行此调用以刷新用户的令牌,以便它获取新的/更新的声明。
这样做完全独立于任何其他 Firebase 功能,因此它不依赖于实时数据库或 Firestore。
您共享的 JavaScript 代码不会刷新客户端中的自定义声明,而是在您设置自定义声明的受信任环境上运行。该代码仅在用户配置文件最后一次更新时在实时数据库中进行标记。
然后,您将在客户端上运行另一段代码来侦听此数据库值,并在数据库标志更改时强制客户端刷新用户的 ID 令牌。
该代码位于您在Client side implementation (JavaScript)下共享的同一文档页面中。
推荐阅读
- wordpress - 几个永久链接 wordpress 的自定义模板页面
- mongodb - 使用 mongodb 聚合框架计算数组中的项目出现次数
- python - 不断收到关闭弹出窗口的错误
- powershell - 在 PowerShell 脚本中使用秘密变量的正确方法
- google-apps-script - 从单元格值调用函数,然后运行函数
- kframework - 在 K 语言中添加冒号
- python - 尽可能将整数列表分解为最大和的块
- vb.net - RS-232 不稳定行为
- .net-core - 要成为真正的 .Net Core,它是 .Net 标准 - 对吗?
- c# - 如何修改此 LINQ 查询以对分组进行重复数据删除?