簡體   English   中英

由於未知原因,uid 上的 Firestore 規則不起作用

[英]Firestore rule on uid doesn't work for unknown reason

我的文檔中有一個“所有者”字段,僅授權所有者閱讀該文檔,並且只能寫一個其“所有者”字段是用戶 uid 的新文檔:

allow read: if request.auth.uid == resource.data.owner; allow create, write: if request.auth.uid == request.resource.data.owner;

創建和更新規則按預期工作! 我測試發現,如果新數據中記錄的'owner'字段不是用戶的UID,那么它不起作用!

問題是“閱讀”部分。 我無法讀取記錄。 只有當我更改為allow read: request.auth.uid != null ,我才能讀取。 我三次檢查記錄是否有一個與 UID 完全相同的“所有者”字段,也在調試中。

我有 Firebase 的經驗,我不知道這里有什么問題。

由於您指出“[您無法] 能夠讀取記錄s ”(在記錄中帶有S ),因此您的問題很可能來自安全規則不是過濾器這一事實,如文檔中所述:

一旦保護了數據並開始編寫查詢,請記住安全規則不是過濾器。 您不能為集合中的所有文檔編寫查詢並期望 Cloud Firestore 僅返回當前客戶端有權訪問的文檔

您沒有顯示用於讀取 Firestore 文檔的查詢,但讓我們假設您的文檔位於名為collection的集合中。

像這樣的查詢

query = db.collection("collection")
query.get().then(....);

您正在獨立於用戶 ID 進行查詢,因此出現了問題。

您需要使用where()方法調整您的查詢,如下所示:

//get the value of uid
query = db.collection("cities").where("owner", "==", uid)
query.get().then(....)

暫無
暫無

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

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