存储在本地存储中的Firebase用户无法正常工作? (javascript)

时间:2018-09-24 23:53:06

标签: javascript firebase firebase-authentication local-storage

我在创建时将用户对象保存在本地存储中(以确保以后可以在authStateChanged之外的自定义函数中使用它)

const promise = auth.createUserWithEmailAndPassword(email, pass);
  promise.then(e => {
    var user = firebase.auth().currentUser;
    localStorage.setItem('fireUser', JSON.stringify(user));
    user.sendEmailVerification();
  }).catch(function(error) {
  var errorCode = error.code;
  var errorMessage = error.message;
  });

然后我在下面的自定义函数中检索它,它在使用时像user.uid一样工作,但是当它用作user.delete()时却报错“ user.delete不是一个函数”,为什么呢? ?变量user在localStorage中看起来像这样:

enter image description here

我的自定义功能:

var myTimer;
function validTimer(timerValid){
  var user = JSON.parse(localStorage.getItem('fireUser'));
  // var buser = firebase.auth().currentUser; <-- doesn't work here
  myTimer = setInterval(function() {
      timerValid++;
      localStorage.setItem('fireTimer', timerValid);
      if (timerValid == 22) {
        // delete in database
        var userId = user.uid;
        var ref = firebase.database().ref().child('users');
        ref.child(userId).once("value", function(snapshot){
          if (snapshot.exists()){
            database.ref("users/"+userId).remove();
          }
        });
        // delete account
        user.delete().then(function() {  // this says user.delete is not a function
        }).catch(function(error) {
        });
      }
  }, 1000);
}

1 个答案:

答案 0 :(得分:2)

当您对其进行字符串化和解析后,它的实例方法就被剥夺了。 delete方法是firebase用户对象的实例方法。在这种情况下,您的用户尽管看上去相同,但不是Firebase用户。只是一个裸露的物体。

编辑

要通过客户端SDK保留firebase用户,您想使用firebase.auth().onAuthStateChanged()方法。页面重新加载后不久,此方法将触发。放在这里。直接来自web starting guide

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    // User is signed in.
    var displayName = user.displayName;
    var email = user.email;
    var emailVerified = user.emailVerified;
    var photoURL = user.photoURL;
    var isAnonymous = user.isAnonymous;
    var uid = user.uid;
    var providerData = user.providerData;
    // ...
  } else {
    // User is signed out.
    // ...
  }
});