使用Firebase检测用户名的唯一性并响应js

时间:2019-05-10 00:45:58

标签: reactjs firebase firebase-authentication

在注册表中,我有三个字段

  • 用户名
  • 电子邮件ID
  • 密码

当用户注册时,我需要验证用户名是否已被使用。我正在发送电子邮件和密码进行身份验证,并使用username更新配置文件。如何检查用户名是否已使用?

firebase.auth().createUserWithEmailAndPassword(this.state.email, this.state.password).then(createdUser => {
                    console.log(createdUser);
                    createdUser.user.updateProfile({
                        username: this.state.username
})

2 个答案:

答案 0 :(得分:1)

首先,请注意,User没有username属性。因此,将具有username属性的对象传递给updateProfile()方法将不起作用。您需要传递具有displayNamephotoURL属性的对象。

如果您想将用户名与您的用户相关联,您可以做的很好(这是很常见的),即在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中,可以验证是否未使用用户名,可以提交呼叫。