亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

由于安全規則,Firestore 上的“PERMISSION_DENIED”問題

由于安全規則,Firestore 上的“PERMISSION_DENIED”問題

倚天杖 2023-05-24 15:29:52
AuthUI.getInstance()如果用戶必須注冊,我的 Android Java 應用程序首先創建一個 Firebase 帳戶(帶密碼的電子郵件) 。創建帳戶后,會出現一個對話框,通知用戶他收到了一封驗證電子郵件,他必須單擊電子郵件中的驗證鏈接。用戶完成此操作后,他就可以關閉對話框并繼續在 Firestore 中配置他的帳戶。但是對受安全規則保護的 Firestore 文檔的所有請求,例如allow read: if request.auth.uid != null && request.auth.token.email != null && request.auth.token.email_verified == true;失敗com.google.firebase.firestore.FirebaseFirestoreException:PERMISSION_DENIED:權限缺失或不足如果用戶關閉應用程序,重新啟動它并重新驗證,那么它的工作(Firestore 請求的權限沒有問題)。我做了幾次測試。如果我將安全規則更改為allow read: if request.auth.uid != null && request.auth.token.email != null;一切正常,但從我的角度來看它不太安全,因為不保證電子郵件已驗證。Firestore 似乎仍然不知道該帳戶已通過驗證。
查看完整描述

1 回答

?
烙印99

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在檢查用戶是否經過驗證的語句之前執行此操作。

查看完整回答
反對 回復 2023-05-24
  • 1 回答
  • 0 關注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號