如何访问其他js文件中的用户对象

时间:2019-07-18 06:03:32

标签: javascript html asynchronous firebase-authentication google-signin

我制作了一个Google登录登录js文件,该文件可在我的网站的登录屏幕上使用。但是,我想在我的网站上使用非常不同的javascript文件的其他页面上访问该用户对象(已登录)。如何获得在另一个JavaScript文件上登录的用户对象?另外,我对异步工作原理的了解非常有限,但是如果有人可以帮助我解决这个问题,我将非常感激。

另外,在代码片段上,我在下面显示了一个非常奇怪的错误。当我console.log(name)时,它输出一个空字符串,并在某一时刻输出已登录用户的实际名称。但是,在我没有的任何js文件中,我什至没有初始化name变量,所以我有0了解如何能够获取这些数据。然后,我继续关闭XAMPP并重新启动,现在它打印出一个空字符串,这很令人困惑,因为它应该是未定义的?

我已经尝试阅读多个论坛,并且在这一点上,我已经达到了使用firebase.auth()。onAuthStateChanged(function(user){... CODE ...})的地步。但是,最大的问题是,如果我在函数内部重新分配变量名以在javascript文件中使用,则该函数名将无效,因为它是一个异步函数。我基本上想提取诸如(name = user.displayName,email = user.email,id = user.uid)之类的信息,以便以后在我的JavaScript中使用。

javascript

 firebase.initializeApp(config);
    firebase.auth().onAuthStateChanged(function(user){
        if(user){
            var user = firebase.auth().currentUser;
            userName = user.displayName;
        }
        else {
            console.log("Not Signed In");
        }
    });
    console.log(name);
    console.log(userName);




//SHOWS AN EMPTY STRING ON THIS LINE                       other_file.js:39
Uncaught ReferenceError: userName is not defined           other_file.js:40
    at other_file.js:40

1 个答案:

答案 0 :(得分:-1)

在定义用户对象的文件中,将userName分配给窗口对象,例如 window.userName = userName 。它将在全球范围内使用。