【发布时间】:2019-12-29 07:17:26
【问题描述】:
我想在用户之间共享安全数据。
"shared_requests" : {
"shared_uid" : {
"deviceSeriNo" : "device1serino",
"user1" : {
"email" : "john@john.com",
"userName" : "John"
},
"user2" : {
"email" : "micheal@micheal.com",
"userName" : "Micheal"
}
}
}
规则:(已编辑,我忘了写一小部分。(auth.uid.email.replace('@','').replace('.','')) )
"shared_requests": {
"$key": {
".read": "root.child('shared_requests').child($key).child('user1/email').val() == auth.uid.email.replace('@','_').replace('.','_') || root.child('shared_requests').child($key).child('user2/email').val() == auth.uid.email.replace('@','_').replace('.','_')",
".write": "root.child('shared_requests').child($key).child('user1/email').val() == auth.uid.email.replace('@','_').replace('.','_') || root.child('shared_requests').child($key).child('user2/email').val() == auth.uid.email.replace('@','_').replace('.','_')"
}
}
但不工作。我该如何解决这个问题?
编辑:
当我尝试使用 UID 时它可以工作。
"shared_req4": {
"shared_uid": {
"$key": {
".read": "auth != null && auth.uid === $key",
".write": "auth != null && auth.uid === $key"
}
}
}
数据:
模拟器:
模拟结果:
但是当我通过电子邮件尝试时它不起作用。
"shared_req3": {
"shared_uid": {
"$key": {
".read": "auth != null && auth.uid.email.replace('@','_').replace('.','_') === $key",
".write": "auth != null && auth.uid === $key"
}
}
}
数据:
模拟器:
模拟结果:
【问题讨论】:
-
安全规则本身意义不大。你会根据这些规则运行什么代码?您期望从该代码中得到什么结果?你得到的结果是什么?请编辑您的问题以包含这些内容。
-
您有机会将屏幕截图更新为英文吗?您可以临时覆盖控制台的语言,如下所示:stackoverflow.com/questions/43970866/…
-
@FrankvanPuffelen 我找到了一种适用于 UID 的方法。但我无法通过电子邮件运行此方法。
-
auth.uid.email应该是什么?你的意思是auth.token.email? firebase.google.com/docs/reference/security/database#authtoken -
@FrankvanPuffelen 我试过 'auth.token.email' 但这是同样的错误。当我尝试“asd_asd_com”而不是“auth.token.email”时,它也有效。 “替换”会不会有问题?我们能看到函数返回了什么吗?
标签: firebase firebase-realtime-database firebase-security