簡體   English   中英

Firestore 安全規則缺少為新的經過身份驗證的用戶創建新文檔的權限

[英]Firestore security rules missing permissions on create new document for new authenticated user

我正在嘗試設置基於角色的 Firestore 安全規則,但如果傳入數據 uid 與 auth uid 匹配,我仍然無法解決如何創建新文檔的問題。

但是在哪里定義傳入的 uid 呢?

我已嘗試將新用戶的用戶 uid 初始化為我的 model,如下面的代碼但它仍然缺少一些權限。

final personalInfoData = PersonalInfoModel(
   uid: auth.getUid(),
   name: name,
   age: int.parse(age),
);

這是我的代碼看起來像

match /profile/{profileId}/{document=**}{
    allow read: if isSignedIn() && docIdEqualsAuthId(profileId);
    allow create: if isSignedIn() && incomingUidEqualsAuthId();
} 

function isSignedIn(){
    return request.auth != null;
}
    
function docIdEqualsAuthId(profileId){
    return profileId == request.auth.uid;
}

function incomingUidEqualsAuthId(){
    return request.resource.data.uid == request.auth.uid;
}

這是我的 controller 代碼:

String getUid() {
  return auth.currentUser!.uid;
}

final personalInfoData = PersonalInfoModel(
  name: name,
  age: int.parse(age),
);

DocumentReference profileCRef =
    firestore.collection("profile").doc(auth.getUid());

try {
  await profileCRef.set({'personalInfo': json}, SetOptions(merge: true));
} on Exception catch (e) {
  print(e);
}

我設置 controller 的方式是創建一個新文檔,其文檔 ID 為新用戶的request.auth.uid

我想要規則來識別新用戶是否經過身份驗證,並且創建配置文件信息的傳入請求必須具有與 auth uid 匹配的有效用戶 ID。

如果數據庫中仍不存在該文檔,則創建一個 ID 為 uid 的新文檔。

我得到的錯誤是這個

W/Firestore(14626): (24.0.1) [WriteStream]: (221034) Stream closed with status: Status{code=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null}.

W/Firestore(14626): (24.0.1) [Firestore]: Write failed at profile/N8CuobvPdHXr40KYgebw52SmOBp2: Status{code=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null}

request.resource.data是您嘗試添加到文檔中的數據。 當前uid不是文檔中的一個字段,而是personalInfo map 中的一個屬性。因此,您必須指定您試圖在安全規則中讀取的字段的路徑。 以下應該工作:

function incomingUidEqualsAuthId(){
    return request.resource.data.personalInfo.uid == request.auth.uid;
}

暫無
暫無

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

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