簡體   English   中英

在真實設備上時,Firestore 安全規則不會從令牌中檢測電話號碼

[英]Firestore security rule doesn't detect phone number from token when on real device

我有一個問題,即 Firestore 安全規則無法根據用戶的電話號碼過濾掉用戶。 該規則設置得很好,它適用於模擬器,但當我在真實設備上測試它時卻不行。

我有一組管理員,其中文檔 ID 是電話號碼。 我的安全規則檢查用戶的電話號碼是否存在於集合中,如果存在則返回 true。 我已根據此處的答案進行了如下設置-

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    function isAdmin() {
        return exists(path("/databases/" + database + "/documents/admins/" + request.auth.token.phone_number));
    }
    
    match /tasks/{task=**} {
      allow read: if request.auth.uid != null;
      allow create: if isAdmin();
      allow delete: if isAdmin();
      allow update: if request.auth.uid != null;
    }
  }
}

當我在模擬器上嘗試時,上述代碼段中的創建和刪除規則得到批准,但在真實設備上測試時失敗。 我還必須提到,如果我將過濾器從電話號碼更改為 uid,並將集合中的文檔 id 更改為 uid,則以這種方式在真實設備上運行良好 -

return exists(path("/databases/" + database + "/documents/admins/" + request.auth.uid));

感覺好像無法從auth讀取token值。 我正在使用 flutter package for firebase auth 和 firestore 發送請求

解決了:

問題是 Firestore 規則無法解析國家代碼中的“+”符號。 因此,這無法驗證 ID 為“+919876543210”的文檔是否存在,例如(對於印度國家代碼 +91)。 我所要做的就是去掉“+”符號,同時在管理集合中制作文檔,如下所示:

firestore 文檔結構

並在檢查規則時手動替換符號,如下所示:

    function isAdmin() {
        return exists(path("/databases/" + database + "/documents/admins/" + request.auth.token.phone_number.replace('\\+', '')));
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM