1 回答

TA貢獻1829條經驗 獲得超13個贊
根據谷歌:
Firebase 安全規則介于您的數據和惡意用戶之間。您可以編寫簡單或復雜的規則來保護您的應用程序數據,達到您的特定應用程序所需的粒度級別。
Firebase 安全規則利用可擴展、靈活的配置語言來定義您的用戶可以訪問實時數據庫、Cloud Firestore 和 Cloud Storage 的哪些數據。Firebase 實時數據庫規則在規則定義中利用 JSON,而 Cloud Firestore 安全規則和適用于云存儲的 Firebase 安全規則利用一種獨特的語言來適應更復雜的規則特定結構。
這是您的主要問題:如果用戶未經過帳戶驗證,您將執行一些 Firestore 相關任務。但是,如果他未經過驗證,您會再次收到來自 Firestore 的電子郵件。但是您的安全規則描述了除非您經過帳戶驗證,否則您不應該能夠訪問數據庫。這就是代碼失敗的地方。這是你的錯誤:
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?
您需要先執行驗證,確認用戶已通過驗證,然后嘗試訪問數據庫。
另一個因素可能是您需要刷新您的 firebase 帳戶對象,如下所示:
FirebaseAuth.getInstance().getCurrentUser().reload();
這樣做是為了刷新您的帳戶狀態。因為 firebase 保留對您帳戶的引用并且該引用被緩存,所以重新加載您的帳戶是一個有用的想法,因此它會被更新。if
在檢查用戶是否經過驗證的語句之前執行此操作。
添加回答
舉報