我將以下資料保存在 firebase 的用戶集合中
{
"uid":"randomid",
"name":"name",
"number":"1234"
}
當我嘗試檢查用戶是否存在時,下面的代碼作業正常
const result = await firestore().collection('users').where('uid', '==', userid).get()
那么經過身份驗證的用戶可以讀取整個用戶的集合嗎?
const result = await firestore().collection('users').get()
我可以撰寫哪些安全規則來防止用戶讀取集合而僅根據 uid 讀取他們的資訊?
uj5u.com熱心網友回復:
在安全規則中,您可以拆分read對get和的訪問list。因此,如果您希望授予每個用戶的訪問權限以僅獲取他自己的資料,則需要使用以下規則(我假設集合中的每個用戶檔案都是該用戶的 uid):
match /users/{user} {
function isUserOwner() {
return request.auth.uid == user
}
allow get: if isUserOwner();
allow list: if false;
}
uj5u.com熱心網友回復:
首先,您需要將 uid 欄位設定為創建檔案的用戶的 UID。
獲取當前用戶 ID查看檔案
const uid = user.uid;
將當前登錄的用戶 ID 添加為 javascript的現場訪問堆疊溢位示例鏈接
添加 UID 后,您可以使用 request.auth 和 resource.data 變數將每個檔案的讀寫訪問權限限制為相應的用戶。考慮一個包含故事檔案集合的資料庫。看看下面的例子
{
title: "A Great Story",
content: "Once upon a time...",
author: "some_auth_id",
published: false
}
您可以使用以下安全規則來限制每個故事對其作者的讀寫權限:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{storyid} {
// Only the authenticated user who authored the document can read or write
allow read, write: if request.auth != null && request.auth.uid == resource.data.author;
}
}
}
請注意,即使當前用戶實際上是每個故事檔案的作者,以下查詢也會因上述規則而失敗。這種行為的原因是,當 Cloud Firestore 應用您的安全規則時,它會根據其潛在結果集而不是資料庫中檔案的實際屬性來評估查詢
// This query will fail
db.collection("stories").get()
上述規則的適當查詢是
// This query will work
var user = firebase.auth().currentUser;
db.collection("stories").where("author", "==", user.uid).get()
有關上述規則和查詢的更多資訊,請參閱官方檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/390007.html
標籤:火力基地 安全 谷歌云firestore 火力基地安全
