【问题标题】:Html Javascript Firebase Creating UserHtml Javascript Firebase 创建用户
【发布时间】:2018-12-02 22:21:31
【问题描述】:

我正在尝试使用javascriptHTMLfirebase 中为我的website 创建一个user,如下所示:

我的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

【问题讨论】:

  • 你有堆栈跟踪吗?
  • 老实说,我什至不知道那是什么。我很新,对不起
  • 你共享的代码都没有调用signUpButton_TouchUpInside,所以如果createUserWithEmailAndPassword没有被调用,那就可以解释了。你有没有把它连接到 HTML 的某个地方?如果是这样,请也为此共享最小的 HTML。一般来说,看看how to create a minimal complete verifiable example。因为这是提高这里有人可以提供帮助的机会的最佳方式。
  • 好的,我编辑了我的问题。我现在添加了我的 HTML 代码

标签: javascript html firebase firebase-realtime-database firebase-authentication


【解决方案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);
  });

如前所述,更好的更改是use an onAuthStateChanged,它还会自动确保您的用户信息在用户重新加载应用程序时得到更新:

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

【讨论】:

  • 好的,谢谢你——你真的帮了我这个忙。但是现在它,幸运的是,确实将用户添加到Authentication,但不幸的是,没有添加到数据库中。我在那里也做错了吗?
  • 我已经改写了我的问题
  • 这听起来像是一个新问题。在给出当前问题的解决方案后,请不要更改您的问题,而是为新问题打开一个新问题。这也允许其他人提供帮助。另外:不要忘记投票和/或接受我的回答。
猜你喜欢
  • 2018-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
相关资源
最近更新 更多