Я пытаюсь добиться ограничения уникального имени пользователя в firestore. Я экспериментировал и не мог справиться с этим должным образом. Я хочу создать запись аутентификации firebase после того, как убедитесь, что имя пользователя не занято, и создать запись firestore. Сначала я попытался вложить then()
(для создания записи авторизации) в другую then()
(проверка имени пользователя внутри БД), но это стало очень грязно. Как видите, я даже экспериментирую с if()
и else
. Я был бы признателен, если бы кто-то дал понимание.
export const signUp = (newUser) => {
return (dispatch, getState, {getFirebase, getFirestore}) => {
const firebase = getFirebase();
const firestore = getFirestore();
const user = firestore.collection("users").where("username", "==", newUser.username).get();
if (!user) {
firebase.auth().createUserWithEmailAndPassword(
newUser.email,
newUser.password
).then((response) => {
return firestore.collection("users").doc(response.user.uid).set({
firstName: newUser.firstName,
lastName: newUser.lastName,
username: newUser.username,
createdAt: new Date()
})
}).then(() => {
dispatch({type: "SIGNUP_SUCCESS"});
}).catch((err) => {
dispatch({type: "SIGNUP_ERROR", err});
});
} else {
dispatch({type: "SIGNUP_ERROR", err: {message: "username taken"}});
}
}
};