2
是否可以取消訂閱valueChanges()? 當我的用戶登錄,我取他們的用戶數據這樣Firestore:取消訂閱valueChanges(用戶在註銷時獲取「丟失的權限」)
this.user$ = this.afAuth.authState.flatMap(authUser => {
if (!authUser) {
this.user = null;
return Observable.of(this.user);
}
return this.db.doc<UserServerData>(`users/${authUser.uid}`)
.valueChanges()
.map(user => new User(authUser.uid, user));
});
當然,我對公司的FireStore規則說,只有與特定的ID的用戶可以讀取該用戶DATAS ... 所以,當用戶註銷,每個用戶id上的規則查詢都會失敗,並且出現「Missing permissions」錯誤。
所以這裏是我的問題,我該怎麼做? 有沒有辦法取消訂閱查詢?
非常感謝
嗨大衛。謝謝。爲什麼我應該返回一個數組,因爲我在查詢文檔而不是集合?無論如何,我已經嘗試過它和Typescript編譯失敗,因爲我的Observable期待一個「用戶」類型的數據('用戶$:Observable'),我試圖給他一個空數組。另外我正在使用Ionic,所以我沒有角度路由器。由於我在switchMap中,我們確定Firestore查詢不是由authState更改觸發的嗎?再次感謝(Love the Firecasts) –
Maslow
好點!我更新它允許空值或用戶。這取決於你的模板。我建議使用null抑制運算符(?)來解決此問題。 –
對不起大衛。可悲的是,這並沒有解決問題。我們告訴查詢它現在可以返回null,但仍然會嘗試在'users/UID'處獲取用戶,所以我們仍然會出現「權限不足或不足」的錯誤。我認爲對'authUser'的檢查就足夠了,但看起來像在FireMap的連接是在switchMap中進行的。也許這是問題?我是否應該在某處捕獲錯誤以避免運行時錯誤? – Maslow