Html Javascript Firebase Создание пользователя

Я пытаюсь создать user в firebase для моего website, используя javascript и HTML следующим образом:

Мой код HTML:

<head>
    <script src = "https://www.gstatic.com/firebasejs/4.13.0/firebase.js"></script>
    <script>
      // Initialize Firebase
      var config =
      {
        apiKey: "myKey",
        authDomain: "myDomain",
        databaseURL: "myDatabaseUrl",
        projectId: "myProjectId",
        storageBucket: "myStorageBucket",
        messagingSenderId: "myMessagingSenderId"
      };
      firebase.initializeApp(config);
    </script>

    <script src = "signUpScript.js"></script>
  </head>

  <body>
   <input type = "button" value = "SignUp" onclick = "signUpButton_TouchUpInside()">
  </body>

А это мой javascript:

function signUpButton_TouchUpInside()
{

  var userEmail = document.getElementById("emailTextFieldSignUp").value;
  var userPassword = document.getElementById("passwordTextFieldSignUp").value;
  var userName = document.getElementById("nameTextFieldSignUp").value;

  window.alert("test1"); // does get called

  firebase.auth().createUserWithEmailAndPassword(userEmail, userPassword).catch(function(error)
  {
    window.alert("test2"); // doesnt get called
    if (error)
    {
      // Handle Errors here.
      var errorCode = error.code;
      var errorMessage = error.message;

      window.alert("There went something wrong : " + errorMessage);
      // ...
    }
    else
    {
      window.alert("test3"); // doesnt get called
      setUserInfo("", "", userName, userEmail, "1"); // How do I get the uid of the user which was just created?
    }
  });
}

function setUserInfo(profileImageUrl, profileBannerUrl, username, email, uid)
{
  var userId = firebase.auth().currentUser.uid;
  var ref = firebase.database().ref();
  var userRef = ref.child("users").child(userId);

  userRef.set({
    username: username,
    username_lowercase: username.toLowerCase().replace(" ", ""),
    email: email,
    profileImageUrl: profileImageUrl,
    profileBannerUrl: profileBannerUrl
  }, function(error)
  {
    if (error)
    {
      var errorMessage = error.message;

      window.alert("There went something wrong : " + errorMessage);
    }
    else
    {
      window.alert("Account successfully created");
    }
  });
}

Почему-то он даже не вызывает функцию createUserWithEmailAndPassword.

Итак, у меня есть два вопроса:

  1. Почему не вызывается функция?

  2. Если бы он был вызван, как бы мне получить доступ к uid только что созданного пользователя?

У вас есть трассировка стека?

cwallenpoole 23.06.2018 22:50

Честно говоря, я даже не знаю, что это такое. Я новенький, извини

Noah 23.06.2018 23:39

Ни один из совместно используемых вами кодов не вызывает signUpButton_TouchUpInside, так что это объясняет, если createUserWithEmailAndPassword не вызывается. Вы где-то подключили это в HTML? Если да, поделитесь минимальным HTML и для этого. В общем, посмотрите как создать минимальный полный проверяемый пример. Таким образом, это лучший способ повысить шансы на то, что кто-то здесь может помочь.

Frank van Puffelen 24.06.2018 00:46

Хорошо, я отредактировал свой вопрос. Я добавил свой HTML-код

Noah 24.06.2018 00:56
Поведение ключевого слова "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) для оценки ваших знаний,...
0
4
895
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Ваш текущий код обнаруживает ошибки только от createUserWithEmailAndPassword. Причина, по которой в большинстве примеров используется только catch, заключается в том, что обычно лучше всего обрабатывать поток «успешное создание учетной записи» в обработчике onAuthStateChanged.

Наименьшее изменение от вашего текущего кода - добавление then():

firebase.auth().createUserWithEmailAndPassword(userEmail, userPassword)
  .then(function(user) {
    var user = firebase.auth().currentUser;
    setUserInfo("", "", userName, userEmail, user.uid)
  })
  .catch(function(error) {
    // no `if (error)` is needed here: if `catch` is called, there was an error
    var errorCode = error.code;
    var errorMessage = error.message;

    window.alert("There went something wrong : " + errorMessage);
  });

Однако, как было сказано, лучшим изменением является используйте onAuthStateChanged, который затем автоматически также гарантирует, что ваша информация о пользователе обновляется всякий раз, когда пользователь перезагружает приложение:

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    // User is signed in, call setUserInfo here
  } else {
    // No user is signed in.
  }
});

Хорошо, спасибо - вы действительно помогли мне с этим. Но теперь он, к счастью, добавляет пользователя в Authentication, но, к сожалению, не в базу данных. Я тоже что-то не так сделал?

Noah 24.06.2018 12:36

Я перефразировал свой вопрос

Noah 24.06.2018 16:48

Это похоже на новую проблему. Пожалуйста, не меняйте свой вопрос после того, как было дано решение для текущего вопроса, но откройте новый вопрос для новой проблемы. Это позволяет другим тоже помогать. Также: не забудьте проголосовать за и / или принять мой ответ.

Frank van Puffelen 24.06.2018 17:03

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