# #javascript #angular #ionic-framework #firebase-realtime-database #firebase-security
Вопрос:
У меня есть приложение (ионный угловой конденсатор 2), вызывающее какой-либо объект в базе данных Firebase в реальном времени. Он прекрасно работает с правилами доступа и анонимной аутентификацией. Но после обновления некоторых модулей (не знаю, в чем проблема) мне отказывают в разрешении при вызове бд. Это происходит как в Интернете, так и на ios/Android. Я прочитал все страницы из Google и здесь. Но в основном проблема заключается в правилах firestore в базе данных реального времени или решается путем установки правил .read/.write в значение true.
Это аутентификация, вызываемая OnInit (), когда пользователь создается или входит в систему, вызывается continueLoad() :
async loginAndLoad() {
// create anonymous user if not exists and/or log in
await this.fireauth.signInAnonymously().catch((error) => {
console.log('Login error: ' error.code);
console.log('Login error message: ' error.message);
});
// trigger state change, when user is logged in
this.fireauth.onAuthStateChanged((user) => {
if (user.isAnonymous) {
var isAnonymous = user.isAnonymous;
var uid = user.uid;
console.log('User added: ' isAnonymous);
console.log('User uid: ' uid);
// We have a signed in user, go on.. Else throw error
this.continueLoad();
} else {
this.loginAndLoad();
}
});
}
Пример вызова базы данных, это я вызвал из this.continueLoad():
async getElements() {
const elements = this.db.list('settings/elements/da/');
const subscribe = await elements.snapshotChanges().subscribe(res => {
subscribe.unsubscribe();
let array = [];
res.forEach(child => {
let a: any;
a = child.payload.toJSON();
if (a.status == "published") {
array.push({key: child.key,title: a.title});
}
})
this.storage.set('elements', JSON.stringify(array));
})
}
Это правила базы данных в реальном времени:
{
"rules": {
".write": "!data.exists()",
"products": {
".read": "auth.uid != null",
".write": "auth.uid != null",
".indexOn": ["stats", "status", "user_warn", "image_approved", "image_added", "note", "description","title","date_published","date_edited","date_added"]
},
"searchwords": {
".read": "auth.uid != null",
".write": "auth.uid != null"
},
"users": {
".read": "auth.uid != null",
".write": "auth.uid != null amp;amp; auth.provider != 'anonymous'"
},
"settings": {
".read": "auth.uid != null",
".write": "auth.uid != null amp;amp; auth.provider != 'anonymous'"
},
"routes": {
".read": "auth.uid != null",
".write": "auth.uid != null amp;amp; auth.provider != 'anonymous'"
},
"campaigns": {
".read": "auth.uid != null",
".write": "auth.uid != null amp;amp; auth.provider != 'anonymous'"
}
}
}
Вот ионная информация:
Ionic:
Ionic CLI : 6.16.1 (/usr/local/lib/node_modules/@ionic/cli)
Ionic Framework : @ionic/angular 5.6.7
@angular-devkit/build-angular : 0.1100.7
@angular-devkit/schematics : 11.0.7
@angular/cli : 11.0.7
@ionic/angular-toolkit : 3.1.1
Capacitor:
Capacitor CLI : 2.4.6
@capacitor/android : 2.4.7
@capacitor/core : 2.4.6
@capacitor/ios : 2.4.7
Utility:
cordova-res : 0.15.3
native-run : 1.3.0
System:
NodeJS : v14.17.0 (/usr/local/bin/node)
npm : 6.14.13
OS : macOS Big Sur
Это так расстраивает… Надеюсь, что есть кто-то с логическим представлением о проблеме 🙂
Ответ №1:
Наконец я нашел проблему. Как упоминалось в начале, были обновлены некоторые плагины. (После того, как попробовал новый плагин). Итак, после долгих часов отладки. Я понизил рейтинг до Firebase 8.1.2 и @angular/fire до 6.1.5.Все снова заработало..