存储在localstorage中的Firebase用户不起作用? (JavaScript的)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了存储在localstorage中的Firebase用户不起作用? (JavaScript的)相关的知识,希望对你有一定的参考价值。

我在创建时将用户对象保存在localstorage中(为了确保我以后可以在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);
}
答案

当你将字符串化并解析回来时,它被剥夺了它的实例方法。 delete方法是firebase用户对象的实例方法。在这种情况下,您的用户虽然看起来一样,但不是firebase用户。这只是一个光秃秃的物体。

Edit

要通过Client 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.
    // ...
  }
});

以上是关于存储在localstorage中的Firebase用户不起作用? (JavaScript的)的主要内容,如果未能解决你的问题,请参考以下文章

localStorage 需要时间在反应中存储令牌

为啥在浏览器中调用和显示时存储在 localStorage 中的 HTML 会发生变化?

sessionStorage和localStorage

h5 localStorage存储大小(转)

cookiessessionStorage与localStorage在Vue中的使用

使用 Http 和 Secure 将 Jwt 令牌存储在 Cookie 中,而不是 Javascript 中的 LocalStorage