Javascript Firebase用户在登录后立即未定义?
我有一个登录表单,当我试图从firebase对象获取任何用户信息时,它将登录用户(至少我希望它这样做),但它不起作用或工作异常。下面我有两个几乎相同的函数 提交表单版本1(不打印用户uid,而是错误) } lsubmitformv2(将打印出user.uid) 为什么会这样?为什么后一个代码段会记录user.uid?这是某种类型的范围问题吗?为什么第一个代码段无法抓取当前用户?这是一个异步调用吗?我需要强制它在用户登录后等待打印uid吗?我不知道如何解决这个问题,javascript不是我的强项Javascript Firebase用户在登录后立即未定义?,javascript,firebase,firebase-authentication,Javascript,Firebase,Firebase Authentication,我有一个登录表单,当我试图从firebase对象获取任何用户信息时,它将登录用户(至少我希望它这样做),但它不起作用或工作异常。下面我有两个几乎相同的函数 提交表单版本1(不打印用户uid,而是错误) } lsubmitformv2(将打印出user.uid) 为什么会这样?为什么后一个代码段会记录user.uid?这是某种类型的范围问题吗?为什么第一个代码段无法抓取当前用户?这是一个异步调用吗?我需要强制它在用户登录后等待打印uid吗?我不知道如何解决这个问题,javascript不是我的强项
提交表单时会调用该函数。如果我理解正确,您可能想知道为什么第一个代码段没有记录任何内容。对吗?(对不起,我可以在评论中问这个问题,但在我获得50%的声誉之前我不能写评论) 如果问题是这样的,我认为第一个代码段注册了新用户,但是您在控制台中看不到任何消息,因为
signInWithEmailAndPassword
函数是异步的,并且console.log
将在signInWithEmailAndPassword完成之前被调用。因此,当调用console.log时,用户还不存在
在第二个代码段中,您仅在身份验证状态发生更改时打印uid(使用电子邮件和密码的登录更改身份验证状态),这意味着如果身份验证状态更改是由使用电子邮件和密码的登录引发的,则用户将始终存在,因此uid也将存在,这样您就可以console.log了
我希望这对你有帮助 在您的第一个代码片段中,您并不是在等待完成注册用户的承诺。您应该将函数声明为异步,然后添加等待。这样,它将等待进程完成,然后继续
函数lsubmitForm()异步{
//使用表单内容初始化变量
var email=document.getElementById('lemail').value;
var password=document.getElementById('lpassword')。值;
//在用户中登录
等待firebase.auth().signInWithEmailAndPassword(电子邮件,密码)。catch(函数(错误){
//在这里处理错误。
var errorCode=error.code;
var errorMessage=error.message;
// ...
});
var user=firebase.auth().currentUser;
console.log(user.uid)
这是一个异步调用吗?-是的。.signInWithEmailAndPassword()
方法返回一个承诺。
function lsubmitForm() {
// initiate variables with form content
var email = document.getElementById('lemail').value;
var password = document.getElementById('lpassword').value;
//login in the user
firebase.auth().signInWithEmailAndPassword(email, password).catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// ...
});
var user = firebase.auth().currentUser;
console.log(user.uid)
function lsubmitForm() {
// initiate variables with form content
var email = document.getElementById('lemail').value;
var password = document.getElementById('lpassword').value;
//login in the user
firebase.auth().signInWithEmailAndPassword(email, password).catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// ...
});
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
console.log(user.uid)
} else {
}
});
}