【发布时间】:2021-09-16 03:53:08
【问题描述】:
我有一个简单的应用程序,用户可以在其中使用电子邮件和密码进行注册,然后他们可以更改他们的用户名。这是我的onSignUp 方法:
onSignUp() {
const { email, password, userName } = this.state;
this.validate({
userName: { minlength: 3, maxlength: 20, required: true },
email: { email: true, required: true },
password: { minlength: 5, required: true },
});
firebase
.auth()
.createUserWithEmailAndPassword(email, password)
.then((result) => {
firebase
.firestore()
.collection("users")
.doc(firebase.auth().currentUser.uid)
.set({
email,
username,
});
})
.catch((error) => {
this.setState({ error: error.message });
});
}
稍后,我想给用户机会更改他们的userName。如何强制执行唯一的userNames?我能想到的一种方法是首先在firebase上执行查询以检查是否存在这样的用户名?这是正确的方法吗?另一种方式(我读过,但我不完全理解)是执行firebase规则?如果是这样,我如何创建新规则以及如何设置唯一用户名?还是我应该双向进行?
【问题讨论】:
-
这已经在 Stack Overflow 上讨论过很多次了:确保字段唯一性的唯一方法是使用该字段作为集合中文档的 ID。因此,如果您想要唯一的用户名,则需要有一个集合(通常是一个附加集合),您可以在其中存储以用户名作为 ID 的文档。我建议您学习一些these,而不是再次重新发布相同的解决方案,如果您在自己的代码中尝试了那里的解决方案,请回帖。
标签: reactjs firebase react-native google-cloud-firestore