【发布时间】:2017-05-04 17:17:44
【问题描述】:
我有一个使用匿名登录或登录帐户存储数据的 Android 应用程序。
问题是当用户想要将作为匿名用户创建的数据转换为登录帐户时。我成功链接了匿名和登录帐户,但我得到了
SyncTree: Listen at /currentSession/xxx-AnonymousLoginUserId-xx failed: DatabaseError: This client does not have permission to perform this operation
我怀疑这是因为访问规则,但我不知道如何指定它们来告诉 Firebase 它应该接受这两个帐户。
规则看起来像
{
"rules": {
"currentSession": {
"$uid": {
".write": "$uid === auth.uid || auth.provider === 'anonymous'",
".read": "$uid === auth.uid || auth.provider === 'anonymous'"
}
...
},
现在,当我考虑这个问题时,我确信 || auth.provider='anonymous' 是错误的,但我正在分享以帮助您进行诊断。
顺便说一句:如果规则是,一切都很好
{
"rules": {
"currentSession": {
"$uid": {
".write": true,
".read": true
}
...
},
但我对这么弱的规则不满意
编辑 1:auth.provider='anonymous' 的语法错误可能不是原因(我没有复制它,我只是从记忆中输入的)。
编辑 2:请注意 currentSession : { "$uid" : { ...我意识到问题很可能是 auth.uid 只是一个变量,但如果是链接帐户,它可能应该是一组 uid。有什么想法吗?
【问题讨论】:
-
关于您的编辑,您可能需要提供更多详细信息,说明您如何准确地关联帐户以及在这种特殊情况下您正在执行的操作的一些代码。
标签: android firebase-realtime-database firebase-security