【问题标题】:Firebase retrieving user info [duplicate]Firebase检索用户信息[重复]
【发布时间】:2017-09-19 13:31:55
【问题描述】:

我正在尝试检索已登录的用户 ID,以使用 firebase 从数据库中检索与他相关的信息....

在我的 HTML 页面内的标签中,我有以下内容 -

    var user
    var uid;
    firebase.auth().onAuthStateChanged(user => {
        if(!user) {
            window.location = 'login.html'; //If User is not logged in, redirect to login page
        } else {
            user = firebase.auth().currentUser;
            uid = user.uid;
        }
    });

    console.log("UID: " + uid);

而且,它似乎在检查用户是否已登录...因为如果我从主页登录并转到该页面,它就可以工作并转到该页面,但是如果我进入未登录页面,跳转到登录页面...

但是,当我尝试执行该日志语句时,它会将 uid 打印为未定义...知道为什么这不起作用吗?

【问题讨论】:

  • 你把console.log()放在哪里了?
  • 更新问题
  • 这是预期的行为。 onAuthStateChanged() 回调中的代码运行时间与其周围的代码不同。所以uid 只会在回调 inside 中有正确的值。见stackoverflow.com/questions/6847697/…
  • 是的,这就是为什么我认为如果我设置一个我在回调之外声明的变量,它会起作用......但不是吗?猜猜你的链接会告诉我怎么做..

标签: javascript firebase web firebase-realtime-database firebase-authentication


【解决方案1】:

firebase 承诺将需要一些时间来处理 onAuhtStateChanged 中的业务逻辑,因此您在承诺之外的 consoles.log 将首先被调用,并在调用 onAuhtStateChanged 承诺之前将 UID 打印为未定义,尝试如下代码

  var user
  var uid;
firebase.auth().onAuthStateChanged(user => {
    if(!user) {
        window.location = 'login.html'; //If User is not logged in, redirect to login page
    } else {
        user = firebase.auth().currentUser;
        uid = user.uid;
        _callPrintUserUID(uid)
    }
});

var _callPrintUserUID=function(uId){
   console.log("UID: " + uid);//print your global variable.
   console.log("UID: " + uId)// parameter passed.
}

我希望这可以帮助您随时提出有关此答案的任何疑问。 See this answer, i have already answered the more similar question to yours

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-15
    • 2018-03-11
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 2018-06-10
    相关资源
    最近更新 更多