Прежде всего, обратите внимание, что для 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);
});