在注册表中,我有三个字段
当用户注册时,我需要验证用户名是否已被使用。我正在发送电子邮件和密码进行身份验证,并使用username更新配置文件。如何检查用户名是否已使用?
firebase.auth().createUserWithEmailAndPassword(this.state.email, this.state.password).then(createdUser => {
console.log(createdUser);
createdUser.user.updateProfile({
username: this.state.username
})
答案 0 :(得分:1)
首先,请注意,User
没有username
属性。因此,将具有username
属性的对象传递给updateProfile()
方法将不起作用。您需要传递具有displayName
和photoURL
属性的对象。
如果您想将用户名与您的用户相关联,您可以做的很好(这是很常见的),即在Firestore数据库中具有一个包含以下内容的文档的集合:每个用户。然后,您将此用户名值存储在此文档中。
然后,要检查“未使用用户名”,可以在创建用户之前查询集合,如下所示:
var db = firebase.firestore();
var usersRef = db.collection('users');
usersRef.where('username', '==', this.state.username).get()
.then(snapshot => {
if (snapshot.empty) {
return firebase.auth().createUserWithEmailAndPassword(this.state.email, this.state.password);
} else {
throw new Error('username already taken');
}
})
.then(createdUser => {
console.log(createdUser);
//Create the user doc in the users collection
db.collection('users').doc(createdUser.user.uid).set({username: this.state.username});
})
.catch(err => {
console.log('Error: ', err);
});
答案 1 :(得分:0)
您好,您可以在用户名字段上发生onChange事件,该事件调用api来知道用户名是否已经存在。然后在onSubmit中,可以验证是否未使用用户名,可以提交呼叫。