【问题标题】:Google firebase web: User authentication and database writeGoogle firebase web:用户身份验证和数据库写入
【发布时间】:2017-11-11 18:02:27
【问题描述】:

我刚刚开始为我的 web 应用使用 firebase,下面是我的代码和问题。

<script src="https://www.gstatic.com/firebasejs/4.1.2/firebase.js"></script>
<script src="https://www.gstatic.com/firebasejs/4.1.1/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/4.1.1/firebase-auth.js"></script>
<script src="https://www.gstatic.com/firebasejs/4.1.1/firebase-database.js"></script>
<script>
    // Initialize Firebase
    var config = {
      ...
    };
    firebase.initializeApp(config);
</script>

<script>
    function handleSignUp() {
      var email = document.getElementById('email').value;
      var password = document.getElementById('password').value;
      if (email.length < 4) {
        alert('Please enter an email address.');
        return;
      }
      if (password.length < 4) {
        alert('Please enter a password.');
        return;
      }

      firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(error) {
        // Handle Errors here.
        var errorCode = error.code;
        var errorMessage = error.message;
        if (errorCode == 'auth/weak-password') {
          alert('The password is too weak.');
        } else {
          alert(errorMessage);
        }
        console.log(error);        
      });
    }

    function initApp() {
      document.getElementById('quickstart-sign-up').addEventListener('click', handleSignUp, false);
    }

    window.onload = function() {
      initApp();
      firebase.auth().onAuthStateChanged(function(user) {
        if (user) {
          console.log('yes');

我希望在此步骤中将数据持久化到 firebase 数据库中。

        } else {
          console.log('no');
        }
      });
    };

</script>

问题是每当我刷新我的页面时,当用户通过身份验证时,控制台返回 Yes(当我添加数据库推送逻辑时,每当我刷新页面时都会一次又一次地保存数据。我尝试移动console.log 或数据库推送到.onAuthStateChange 到我的initApp()handleSignUp() 函数也是如此。但无济于事。

根据firebase docs,我也尝试了以下方法:

var user = firebase.auth().currentUser;

if (user) {
  // User is signed in.
} else {
  // No user is signed in.
}

但是,这几乎总是返回一个console.log 作为否。我在想,由于身份验证需要一些时间,所以用户检查正在跳过身份验证并且看起来好像没有用户经过身份验证。 问题是我希望用户注册(并自动登录,无论如何使用firebase都会发生这种情况)并将用户详细信息(以及我要求用户在注册时填写的其他详细信息)保存在firebase数据库中只有时间。任何指针都会在这里受到赞赏。

【问题讨论】:

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


    【解决方案1】:

    我想我明白了。 then(promises)的用法:

    firebase.auth().createUserWithEmailAndPassword(email, password).then(function() {
            var user = firebase.auth().currentUser;
            console.log(user.email);
          }).catch(function(error)
    

    一旦创建用户,该函数就会起作用(将在数据库中进行数据持久化),并且由于它不依赖于用户是否经过身份验证,以及唯一的电子邮件,因此永远不会重复此步骤,因此单次数据保存在数据库中。多次浏览文档,不知何故错过了它。抱歉,伙计们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-06
      • 2017-11-15
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      • 2017-04-28
      • 2018-08-21
      相关资源
      最近更新 更多