1 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊
根據(jù)谷歌:
Firebase 安全規(guī)則介于您的數(shù)據(jù)和惡意用戶之間。您可以編寫簡單或復(fù)雜的規(guī)則來保護(hù)您的應(yīng)用程序數(shù)據(jù),達(dá)到您的特定應(yīng)用程序所需的粒度級別。
Firebase 安全規(guī)則利用可擴(kuò)展、靈活的配置語言來定義您的用戶可以訪問實(shí)時(shí)數(shù)據(jù)庫、Cloud Firestore 和 Cloud Storage 的哪些數(shù)據(jù)。Firebase 實(shí)時(shí)數(shù)據(jù)庫規(guī)則在規(guī)則定義中利用 JSON,而 Cloud Firestore 安全規(guī)則和適用于云存儲(chǔ)的 Firebase 安全規(guī)則利用一種獨(dú)特的語言來適應(yīng)更復(fù)雜的規(guī)則特定結(jié)構(gòu)。
這是您的主要問題:如果用戶未經(jīng)過帳戶驗(yàn)證,您將執(zhí)行一些 Firestore 相關(guān)任務(wù)。但是,如果他未經(jīng)過驗(yàn)證,您會(huì)再次收到來自 Firestore 的電子郵件。但是您的安全規(guī)則描述了除非您經(jīng)過帳戶驗(yàn)證,否則您不應(yīng)該能夠訪問數(shù)據(jù)庫。這就是代碼失敗的地方。這是你的錯(cuò)誤:
void performEmailVerification() {
? ? if (firebaseAuth.getCurrentUser().isEmailVerified()) {
? ? ? ? // Everything is OK, perform your task
? ? ? ? checkSomethingOnFirestore();
? ? ? ? return;
? ? }
? ??
? ? //User not verified, but you still get a database reference and try to get the email.
? ? final DocumentReference documentReference = ... //Error produced?
您需要先執(zhí)行驗(yàn)證,確認(rèn)用戶已通過驗(yàn)證,然后嘗試訪問數(shù)據(jù)庫。
另一個(gè)因素可能是您需要刷新您的 firebase 帳戶對象,如下所示:
FirebaseAuth.getInstance().getCurrentUser().reload();
這樣做是為了刷新您的帳戶狀態(tài)。因?yàn)?firebase 保留對您帳戶的引用并且該引用被緩存,所以重新加載您的帳戶是一個(gè)有用的想法,因此它會(huì)被更新。if
在檢查用戶是否經(jīng)過驗(yàn)證的語句之前執(zhí)行此操作。
添加回答
舉報(bào)