Flutter firebase realtime db 在规则中使用 displayName
Posted
技术标签:
【中文标题】Flutter firebase realtime db 在规则中使用 displayName【英文标题】:Flutter firebase realtime db to use displayName in Rules 【发布时间】:2021-12-18 19:45:31 【问题描述】:我使用显示名称更新Profile。然后我尝试在数据库安全规则中访问此显示名称。但是数据库上的 displayName 没有更新。
这是在 Flutter 中使用 Firebase 实时数据库。
代码:
await referencedData.firebaseAuth.currentUser.updateProfile(
displayName: 'gameName' //that only the players know about
);
在我的规则中,我有:
".write": "!data.exists() ||
auth.displayName == data.child('gamename').val()",
//规则意味着没有数据存在,所以所有者可以创建一个新游戏或
//游戏名已经在数据库中设置了,我知道这个游戏名,并且在显示名中,所以我可以写删除
我花了 3 天或更长时间来搜索文档或示例。关于在哪里看有什么想法吗?
【问题讨论】:
【参考方案1】:所有属性都在auth.token
下可用,显示名称在auth.token.name
下可用。
所以:
".write": "!data.exists() ||
auth.token.name == data.child('gamename').val()",
另请参阅 Firebase 参考资料documentation for auth.token
。
【讨论】:
我试图在令牌中设置一个值,但我不知道怎么做。我看到一个 ...currentUser.RefreshToken。我曾假设令牌是 Firestore 中的东西,而不是实时数据库 我对实时数据库规则的回答中的语法和链接。显示名称在name
属性中可用,如我的回答中所示。
我认为我的问题是将游戏名称放入 ...currentUser.token 大概类似于 displayName : "gamename"
我不确定我是否理解。您的代码设置了用户配置文件的显示名称,该名称在安全规则中显示为 auth.token.name
。这不是发生在你身上吗?
对不起,我只是不明白你在说什么。我通常可以使用规则,下面显示了使用规则的解决方法。以上是关于Flutter firebase realtime db 在规则中使用 displayName的主要内容,如果未能解决你的问题,请参考以下文章
带有一个适用于android、ios、web的插件的flutter firebase(实时)数据库? [复制]
从 firebase-realtime-database 过滤数据
如何在 swift 4.0 中获取 firebase-realtime-database 中的特定值
在 Firebase-Realtime Database 上使用啥规则让用户注册和登录?