我试图让用户只读写他们自己的数据。我的规则如下(来自文档)
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
allow read, update, delete: if request.auth != null && request.auth.uid == userId;
allow create: if request.auth != null;
}
}
}
我的用户的uid与我的文档id匹配,但我仍然收到错误:
快照侦听器中未捕获的错误:
Firebase错误:[代码=许可被拒绝]:缺少权限或权限不足。
获取uid到文档id的代码
const handleSignUp = async () => {
auth
.createUserWithEmailAndPassword(email, password)
.then(async (UserCredentials) => {
const user = UserCredentials.user;
console.log("Registered with: ", user.email);
try {
const uidRef = doc(db, 'users', user.uid);
const docRef = await setDoc(uidRef, {
name: name,
age: age,
currentWeight: currentWeight,
goalWeight: goalWeight,
});
} catch (e) {
console.error("Error adding document: ", e);
}
我真的很困惑,因为我已经尝试了许多不同的方法,这里的所有文档/答案都不适合我。我猜错误是在我在此代码中调用snapshot时出现的
const getUser = async() => {
const subscriber = onSnapshot(usersRef, (snapshot) => {
let user = []
snapshot.docs.forEach((doc) => {
user.push({...doc.data(), key: doc.id })
})
setUser(user);
console.log(user);
})
return () => subscriber();
};
我只是不确定这里到底错在哪里。是我的规则吗?我的快照吗?
1条答案
按热度按时间p8h8hvxi1#
假设您得到的是
QuerySnapshot
结果,我怀疑您的代码正在阅读整个users
集合,但正如文档所述,规则不是过滤器,而只是确保您的代码只尝试访问允许访问的数据。因此,您的代码应该只尝试读取当前登录用户的文档。