Создание пользователя в Firebase дает мне ошибку

Итак, я следую руководству Умные приложения, чтобы изучить 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.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
607
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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
    })
  },

Хороший улов, Боб!

Frank van Puffelen 29.07.2018 20:59

Хм, я только что получил credential is not defined

Steven 29.07.2018 21:45

Не могу сказать, в чем проблема, не увидев вашего исправленного кода. Вы вносили изменения в .then(credential=>...?

Bob Snyder 29.07.2018 22:19

Извини, моя ошибка. Я не видел первого определения «учетных данных». Теперь это сработало. Спасибо :-)

Steven 29.07.2018 22:42

Интересно, что мой signUp () работает, не меняя его на учетные данные, но я должен использовать учетные данные для входа в систему ()

JackJack 24.11.2018 04:54

это спасло меня! Я был на том же курсе, но позже застрял из-за этого. Спасибо!

Frizzant 09.01.2020 11:41

Другие вопросы по теме