Я пытаюсь проверить, существует ли имя пользователя в Firestore. Я делаю это в функциях, это выглядит так:
exports.checkUser = functions.https.onCall(async (data, context) => {
// Uses the username from the data to compare it to the doc
const usernameExists = await admin
.firestore()
.collection('users')
.doc(data.username)
.get();
// Check the the username passed exists
if (usernameExists.exists) {
//If the username that is passed exists, we want to repond with an error
throw new functions.https.HttpsError(
'already-exists',
'This username is already taken. Please try another one.'
);
}
На стороне клиента у меня есть что-то вроде этого:
async register({ username, email, password }) {
const callUsernameFunction = this.functions.httpsCallable('checkUser');
const usernamePrint = callUsernameFunction({ username });
return usernamePrint;
}
Мой Cloud Firestore выглядит так:
Это прекрасно работает. Когда я набираю имя пользователя, которое уже используется, я получаю сообщение об ошибке, в котором говорится, что оно уже используется. Тем не менее, я не уверен, как реализовать this.auth.createUserWithEmailAndPassword(email, password);
в этом. Поведение должно быть следующим:
- Пользователь отправляет имя пользователя, адрес электронной почты и пароль
- Отправляет
httpsCallable
в функции - Функции проверяют, если Пользователь существует и возвращает ошибку, если нет
- Если пользователь существует, выведите ошибку, если нет
createUserWithEmailAndPassword
и зарегистрируйте нового пользователя в Cloud Firestore
Если это поможет, я ' м, используя ReactJS с Гэтсби для внешнего интерфейса.