По какой-то причине, когда я тестирую свои правила доступа к БД, это хорошо работает на симуляторе firebase.Но когда я пробую это в моем коде, это не работает, значение никогда не возвращается.Если я изменю правила, чтобы разрешить глобальное чтение, как показано ниже, код снова начнет работать.
{
"rules": {
".read":"true"
}
}
Поэтому я считаю, что ошибка не в самих правилах, а в какой-то момент во время аутентификации.Самое странное, что когда я запускаю
firebase.auth().currentUser.uid
, он возвращает ожидаемое значение
"0x17d54a755b1bccbe23c6834a38f511c055e67a71"
Я уже проверил документы
https://firebase.google.com/docs/database/security/securing-data https://firebase.google.com/docs/auth/admin/create-custom-tokens
Но мне не удалось найти проблему
Это правила доступа.
{
"rules": {
"NFC":{
"$mainProductKey":{
".write":"root.child('brands').child(auth.uid).child($mainProductKey).exists()"
},
".write":"root.child('brands').child(auth.uid).child('products').exists()",
".read":"true"
},
"brands":{
"$uid":{
".read": "$uid == auth.uid",
".write": "$uid == auth.uid"
}
},
}
}
это часть моей структуры БД
{
"NFC" : {
...
},
"brands" : {
"0x17d54A755b1BCcBe23C6834A38F511c055e67a71" : {
"unlocked" : true
}
}
}
это моя полезная нагрузка токена JWT
{
"uid": "0x17d54a755b1bccbe23c6834a38f511c055e67a71",
"iat": 1536771364,
"exp": 1536774964,
"aud": "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
"iss": "firebase-adminsdk-u3222@deverytest-3d280.iam.gserviceaccount.com",
"sub": "firebase-adminsdk-u3222@deverytest-3d280.iam.gserviceaccount.com"
}
это код, который не возвращается после добавления правил
export function loadAccountLock (brandAddress) {
return new Promise((resolve, reject) => {
firebase.database().ref(`brands/${brandAddress}/`).once('value', function (snapshot) {
let brand = snapshot.val() || {}
resolve(!!brand.unlocked)
})
})
}
и я проверяюпользователи
firebase.auth().signInWithCustomToken(token)