gpt4 book ai didi

javascript - firebase实时数据库查询数据仅适用于登录用户

转载 作者:行者123 更新时间:2023-12-03 01:19:26 25 4
gpt4 key购买 nike

我有以下安全规则:

    {
"rules": {
"users": {
".read" : true,
"$user_id": {
".read": true,
".write": "auth != null && $user_id === auth.uid"
}
}
}
}

我的数据如下:

    {
"users" : {
"JIZW3KswDDMggo9U1WwCoIamHaU2" : {
"-L8s34CZsCgodNxgF09G" : {
"email" : "lmn@yahoo.co.in",
"isAdmin" : true,
"name" : "Mannu Sharma",
},
"UKtLdQzPdWa2KJ10iXrjuV80JSd2" : {
"-L8LTf95dxqQdjYHhFDB" : {
"email" : "pqr@gmail.com",
"name" : "Neeti Singhal"
}
},
"YQCXFjnU8jaXR9xUXIgknp18Z3A3" : {
"-L8TQTFiGLEuxCTbbrQ7" : {
"email" : "abcd@gmail.com",
"name" : "John Teslie",

}
}
}

我用于查询数据的 angularfire2 代码是:

getUserByEmail(email:string){
console.log("start of getUserByEmail with email:" + email)
return new Promise((resolve, reject) =>
{

this.db.list("/users",
ref => ref.orderByChild('email').equalTo(email)
).valueChanges().subscribe(
res => {
console.log('response:' + JSON.stringify(res))
resolve(res)
},
err => {
console.log(err)
reject(err)
}
)
})
}

我已经实现了 Facebook 登录。因此,当我使用电子邮件 abcd@gmail.com 登录并进行搜索时,它会返回我的记录。但任何其他搜索都不起作用。

据我了解,我的安全规则允许任何人查询用户数据。那么我缺少什么?

最佳答案

您的数据是双重嵌套的:您有 /users/$uid/$pushId。最后一个级别是不需要的,这意味着您无法通过用户的电子邮件查询用户。有关此一般情况的更多信息,请参阅 Firebase Query Double Nested .

但在这种情况下,修复非常简单:我认为您不需要 JSON 中的推送 ID (-L....) 级别。您可能通过调用 push() 添加用户数据,但这是不需要的。删除对 push() 的调用,可能使用 set() 来代替,您应该会丢失 JSON 树中的额外级别。该级别消失后,您可以通过每个用户的 email 属性查询 /users

关于javascript - firebase实时数据库查询数据仅适用于登录用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51827204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com