Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase用户在登录后立即未定义?_Javascript_Firebase_Firebase Authentication - Fatal编程技术网

Javascript Firebase用户在登录后立即未定义?

Javascript Firebase用户在登录后立即未定义?,javascript,firebase,firebase-authentication,Javascript,Firebase,Firebase Authentication,我有一个登录表单,当我试图从firebase对象获取任何用户信息时,它将登录用户(至少我希望它这样做),但它不起作用或工作异常。下面我有两个几乎相同的函数 提交表单版本1(不打印用户uid,而是错误) } lsubmitformv2(将打印出user.uid) 为什么会这样?为什么后一个代码段会记录user.uid?这是某种类型的范围问题吗?为什么第一个代码段无法抓取当前用户?这是一个异步调用吗?我需要强制它在用户登录后等待打印uid吗?我不知道如何解决这个问题,javascript不是我的强项

我有一个登录表单,当我试图从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 {

    }
  });

}