HTML Javascript Firebase Создание пользователя - PullRequest
0 голосов
/ 23 июня 2018

Я пытаюсь создать 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 только что созданного пользователя?

1 Ответ

0 голосов
/ 24 июня 2018

Ваш текущий код только ловит ошибки от 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.
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...