【问题标题】:Firebase realtime database error: user is nullFirebase 实时数据库错误:用户为空
【发布时间】:2022-01-29 23:10:31
【问题描述】:

我想读取 firebase realtimedatabse 数据,结果是一个错误:user is null 和其他错误,这是另一种方法,我无法读取 firebase 实时数据库中的文件

auth.onAuthStateChanged((firebaseUser) => {
if (firebaseUser) {
    console.log('login-form.js | logged')
    const logged = true;
    showHomepage();
    const auth2 = firebase.auth()
    const user = auth2.currentUser;
    var email = user.email
    console.log(email)
    var namee = email
    namee = namee.replace('.','')
    namee = namee.replace('$','')
    namee = namee.replace('#','')
    namee = namee.replace('/','')
    namee = namee.replace('[','')
    namee = namee.replace(']','')
    console.log(namee)
    var ref = db.ref("/Utenti/" + namee + '/');
    ref.on("value", function(data, prevChildKey) {
        const user = data.val();
        console.log(user.soldi)
        document.getElementById('money').innerHTML = user.soldi + '€' 
    }, function (error) {
    console.log("Error: " + error.code);
    }); 
}
});

【问题讨论】:

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


    【解决方案1】:

    在您的情况下,您可以从firebaseUser 变量中get user data(电子邮件,uid,...),而无需调用firebase.auth().currentUser

    firebase.auth().onAuthStateChanged((firebaseUser) => {
      if (firebaseUser) {
        // User is signed in, see docs for a list of available properties
        // https://firebase.google.com/docs/reference/js/firebase.User
        var email = firebaseUser.email;
        var namee = email;
        // ...
      } else {
        // User is signed out
        // ...
      }
    });
    

    此外,您的屏幕截图和代码似乎问题在于您的身份验证函数不返回用户数据,而不是它无法从 firebase 获取用户数据。您可以使用包装函数在 firebase.auth().onStateChanged() 调用之外使用回调函数进行包装,以获取和返回 firebase 用户数据:

    export const firebaseWrapper = (callback) => {
      firebase.auth().onAuthStateChanged((firebaseUser) => {
        if (firebaseUser) {
          // User is signed in, see docs for a list of available properties
          // https://firebase.google.com/docs/reference/js/firebase.User
          var email = firebaseUser.email;
          var namee = email;
          // ...
          callback(firebaseUser);
        } else {
          // User is signed out
          // ...
          callback(null);
        }
      });
    }
    

    这个callback() 函数可以是一个调度函数,也可以是一个setState() 或等效函数,这取决于您的需要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-19
      • 2020-02-20
      • 1970-01-01
      • 2021-10-30
      • 2021-10-07
      • 1970-01-01
      相关资源
      最近更新 更多