【问题标题】:Firebase Web - currentUser returns nullFirebase Web - currentUser 返回 null
【发布时间】:2017-11-26 12:06:24
【问题描述】:

我试图在登录后获取我的当前用户,但这返回 null。 这是我的代码:

var currentUser;
firebase
    .auth()
    .onAuthStateChanged(function(user){
        currentUser = user;
        console.log(currentUser); //this returns my user object 
    });
console.log(currentUser); //this returns "undefined"

var otherCurrentUser = firebase.auth().currentUser;
console.log(otherCurrentUser); // this returns "null"

【问题讨论】:

标签: javascript firebase firebase-authentication


【解决方案1】:

只要用户的身份验证状态发生更改,就会触发onAuthStateChanged 事件。 user 变量仅在该回调中有用。您不能将其从该函数中移出。

所以所有需要用户的代码都应该回调中:

var currentUser;
firebase
    .auth()
    .onAuthStateChanged(function(user){
        currentUser = user;
        console.log(currentUser); //this returns my user object 
    });

有关这方面的更多信息,请参阅其中的一些:

【讨论】:

  • 我想在自己的功能之外使用firebase的currentUser或其他功能。我试过firebase.auth().currentUser,但它返回null。是否有一种方法可以在登录后摆脱当前用户?
【解决方案2】:
var otherCurrentUser = firebase.auth().currentUser;

这将返回 null 因为 auth 对象尚未初始化,您需要一个观察者来执行此操作。 登录时使用观察者并将UID保存在本地存储中,注销时清除本地存储

观察者

var currentUser;
firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
      currentUser = user.uid;
      console.log(currentUser); //this returns my user object 
      window.localStorage.setItem("UID",currentUser);
  } else {
      currentUser = "Error"
      console.log(currentUser); //this returns my user object 
      window.localStorage.setItem("UID",currentUser);
       alert(" Error in your login code");
    // No user is signed in.
  }
});

在此之后,每当您需要获取用户 ID 时,只需使用

var getuid = window.localStorage.getItem("UID")
console.log(getuid) // will log the UID

注销时只需将其删除

window.localStorage.removeItem("UID");

希望这会有所帮助..!

【讨论】:

  • 这对我不起作用,它仍然返回 null,但是谢谢
  • 你的浏览器是否支持localStorage
  • 它对我有用:localStorage.getItem('currentUid');
猜你喜欢
  • 2020-06-24
  • 2018-08-19
  • 2018-10-30
  • 1970-01-01
  • 1970-01-01
  • 2021-03-21
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
相关资源
最近更新 更多