![](/img/trans.png)
[英]firestore security rules - create new user and check if name is free
[英]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.