我在创建时将用户对象保存在本地存储中(以确保我稍后可以在 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 中看起来像这样:
我的自定义函数:
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/