javascript - 使用 Firebase,firebase.auth().currentUser 是 null 值,即使它正在被记录

标签 javascript angular typescript firebase-realtime-database firebase-authentication

我在 service.TS 文件中创建了一个查询,该文件显示基于登录用户的 UID 的项目“状态”:

getLists(): FirebaseListObservable<any> {

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {console.log("blah", firebase.auth().currentUser.uid)
    // User is signed in.
  }
});
  return this.db.list('/foods', {
    query: {
      orderByChild: 'state/'+firebase.auth().currentUser.uid+'/state',
      equalTo: 'listed'
    }
  });
}

使用此查询时,我收到一条错误消息:

未捕获( promise 中):TypeError:null不是对象(评估“WEBPACK_IMPORTED_MODULE_2_firebase_app“auth”.current‌​tUser.uid')。

使用您在上面看到的{console.log("blah", firebase.auth().currentUser.uid),可以在日志中正确显示UID,确认用户是已登录。

我不确定它是否相关,但页面的主 TS 文件正在调用此查询:

    ngOnInit() {

    this.moviesSvc.getLists()
                  .subscribe(lists => {console.log(lists); console.log("UID", firebase.auth().currentUser.uid); this.lists = lists})
  }

我需要做什么才能将 UID 正确传递给查询?

最佳答案

onAuthStateChanged()是异步的,因此当您在回调中有用户 uid 时,只需执行您的操作,如下所示:

getLists(): FirebaseListObservable<any> {

    var self = this;

    firebase.auth().onAuthStateChanged(function(user) {
        if (user) {
            // User is signed in.
            var userID = user.uid;

            return self.db.list('/foods', {
                query: {
                    orderByChild: 'state/' + userID + '/state',
                    equalTo: 'listed'
                }
            });
        }
    });

}

关于javascript - 使用 Firebase,firebase.auth().currentUser 是 null 值,即使它正在被记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46395996/

相关文章:

javascript - 从 Angular 中的文本区域复制到剪贴板

javascript - TypeScript 无法缩小类型

javascript - Typescript 中的工厂函数语法

javascript - 如何固定LegendBox在图表中的位置?

javascript - Angular 将数据传递给子组件

javascript - Win8 Metro (JS/HTML5) - 页面导航后视频不可见

css - 确定对特定选择器 Angular 指令的操作

javascript - TypeScript 是否具有 ES6 "Sets"的等效项

javascript - PHP-将查询结果插入到另一个查询语句中

javascript - 通过 JavaScript 为 CSS 网格生成单元格