作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试实现此逻辑,当用户成功注册时,应用程序会在 firestore 中创建一个带有 id=user.email
的文档。为此,我在 firestore 中创建了以下安全规则:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read: if request.auth != null;
}
match /users/{userId}{
allow read: if request.auth != null;
allow write: if request.auth.token.email == userId;
}
}
}
以及我的应用程序中的以下代码:
const { email, password, name, lastName } = value;
firebase
.auth()
.createUserWithEmailAndPassword(email, password)
.then(() => {
firestore.collection('users').doc(email).set({
name, lastName
})
.then(function(docRef) {
console.log("Document written with ID: ", docRef.id);
})
.catch(function(error) {
console.error("Error adding document: ", error);
});
this.props.navigation.navigate('Main')
})
.catch(error => alert(error))
当我运行我的应用程序时,出现以下错误:
Error adding document: , [FirebaseError: Missing or insufficient permissions.]
最佳答案
使用用户的电子邮件地址作为唯一标识符并不是一个好主意,因为它可能会随着时间的推移而发生变化。最好使用 Firebase 身份验证分配的唯一用户 ID (uid)。
规则:
match /users/{userId} {
allow read: if request.auth != null;
allow write: if request.auth.uid == userId;
}
代码:
firebase
.auth()
.createUserWithEmailAndPassword(email, password)
.then(userCredential => {
firestore.collection('users').doc(userCredential.user.uid).set({
name, lastName
})
这更为常见,可以更轻松地编写安全规则,并且可以抵抗电子邮件更改。
关于javascript - 如何在firestore中创建新的用户文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57320265/
我是一名优秀的程序员,十分优秀!