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 上使用啥规则让用户注册和登录?

如何从 Firebase Realtime DB 读取孩子的值?

如何使用 Firebase RealTime 数据库根据特定类别获取项目集合