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

标签 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 时它会给出错误“user.delete is not a function” .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 用户。它只是一个裸对象。

编辑

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

关于javascript - 存储在 localstorage 中的 Firebase 用户不起作用? (javascript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52488776/

相关文章:

android - Firebase/Facebook 身份验证 - OAuthException - 代码 190

ios - FCM 和 iOS - 仅在切换到前台或重新打开应用程序时收到消息

swift - 从 firebase 数据库中删除

javascript - $compile 显示未捕获的 TypeError : undefined is not a function

javascript - 将字符串解析为 JSON,键和键值上带有单引号

javascript - 使用 Javascript 使用InfiniteScroll 过滤 Firebase 数据集

android - 在 Android 应用程序中使用电子邮件 ID 和密码注册

ios - 为什么我的createUser方法会触发appDelegate中的addStateDidChangeListener方法?

javascript - HTML 幻灯片宽度

javascript - React-router-dom (v6) 和 Framer Motion (v4)