Итак, я следую руководству Умные приложения, чтобы изучить Vue.js. В этом руководстве используется Firebase с Firestore. Поскольку Firestore находится в бета-версии (как сказано в руководстве), могут произойти изменения - и я думаю, что это может иметь место здесь.
В любом случае пытаюсь зарегистрировать нового пользователя. Я заполняю форму, нажимаю «Зарегистрироваться» и получаю следующее сообщение об ошибке:
Error: Function CollectionReference.doc() requires its first argument to be of type string, but it was: undefined
Но глядя в Firebase, я вижу, что пользователь был создан. Так почему я получаю это сообщение об ошибке? Какой первый аргумент?
Код для регистрации выглядит так:
signup() {
this.performingRequest = true;
fb.auth.createUserWithEmailAndPassword(this.signupForm.email, this.signupForm.password).then(user => {
this.$store.commit('setCurrentUser', user);
// create user obj
fb.usersCollection.doc(user.uid).set({
name: this.signupForm.name,
title: this.signupForm.title
}).then(() => {
this.$store.dispatch('fetchUserProfile');
this.performingRequest = false;
this.$router.push('/dashboard')
}).catch(err => {
console.info(err);
this.performingRequest = false;
this.errorMsg = err.message
})
}).catch(err => {
console.info(err);
this.performingRequest = false;
this.errorMsg = err.message
})
},
Дайте мне знать, если вам понадобится больше кода - я впервые тестирую Vue.js.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


createUserWithEmailAndPassword () возвращает Promise, содержащий UserCredential. UserCredential имеет свойство user для объекта firebase.User.
Вам необходимо внести соответствующие изменения в свой код, чтобы правильно получить доступ к UID:
signup() {
this.performingRequest = true;
fb.auth.createUserWithEmailAndPassword(this.signupForm.email, this.signupForm.password)
.then(credential=> { // CHANGED
this.$store.commit('setCurrentUser', credential.user); // CHANGED
// create user obj
fb.usersCollection.doc(credential.user.uid).set({ //CHANGED
name: this.signupForm.name,
title: this.signupForm.title
}).then(() => {
this.$store.dispatch('fetchUserProfile');
this.performingRequest = false;
this.$router.push('/dashboard')
}).catch(err => {
console.info(err);
this.performingRequest = false;
this.errorMsg = err.message
})
}).catch(err => {
console.info(err);
this.performingRequest = false;
this.errorMsg = err.message
})
},
Хм, я только что получил credential is not defined
Не могу сказать, в чем проблема, не увидев вашего исправленного кода. Вы вносили изменения в .then(credential=>...?
Извини, моя ошибка. Я не видел первого определения «учетных данных». Теперь это сработало. Спасибо :-)
Интересно, что мой signUp () работает, не меняя его на учетные данные, но я должен использовать учетные данные для входа в систему ()
это спасло меня! Я был на том же курсе, но позже застрял из-за этого. Спасибо!
Хороший улов, Боб!