第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

由于安全規(guī)則,F(xiàn)irestore 上的“PERMISSION_DENIED”問題

由于安全規(guī)則,F(xiàn)irestore 上的“PERMISSION_DENIED”問題

倚天杖 2023-05-24 15:29:52
AuthUI.getInstance()如果用戶必須注冊,我的 Android Java 應(yīng)用程序首先創(chuàng)建一個(gè) Firebase 帳戶(帶密碼的電子郵件) 。創(chuàng)建帳戶后,會(huì)出現(xiàn)一個(gè)對話框,通知用戶他收到了一封驗(yàn)證電子郵件,他必須單擊電子郵件中的驗(yàn)證鏈接。用戶完成此操作后,他就可以關(guān)閉對話框并繼續(xù)在 Firestore 中配置他的帳戶。但是對受安全規(guī)則保護(hù)的 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:權(quán)限缺失或不足如果用戶關(guān)閉應(yīng)用程序,重新啟動(dòng)它并重新驗(yàn)證,那么它的工作(Firestore 請求的權(quán)限沒有問題)。我做了幾次測試。如果我將安全規(guī)則更改為allow read: if request.auth.uid != null && request.auth.token.email != null;一切正常,但從我的角度來看它不太安全,因?yàn)椴槐WC電子郵件已驗(yàn)證。Firestore 似乎仍然不知道該帳戶已通過驗(yàn)證。
查看完整描述

1 回答

?
烙印99

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í)行此操作。

查看完整回答
反對 回復(fù) 2023-05-24
  • 1 回答
  • 0 關(guān)注
  • 156 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號