firebase onAuth()引发:TypeError无法读取属性'auth'的未定义

firebase onAuth() throwing: TypeError cannot read property 'auth' of undefined

本文关键字:属性 auth 未定义 读取 onAuth 引发 TypeError firebase      更新时间:2023-09-26

我使用Firebase作为我的主要后端解决方案,并创建了一个在整个应用程序中处理身份验证的服务(由于我开始使用simpleLogin,现在我正尝试使用他们的内置登录方法,我认为在从应用程序的其他部分访问之前,最好先确定所有范围)。

我的firebase引用运行良好,auth方法也是如此
但是侦听方法onAuth()和offAuth(

Uncaught TypeError:无法读取未定义-firebase debug.js:9954的属性"auth"

这是firebase本身的bug吗?还是有人看到我做错了什么?尝试使用angular版本,并关闭其他bower包,如angularfire和firebase简单登录,但迄今为止没有成功。

我的身份验证服务代码如下,除了在.constant服务上定义url之外,我没有做任何事情。

    angular.module('myApp')
    .factory('auth', function (firebaseAPIUrl) {
      var ref = new Firebase(firebaseAPIUrl),
          onAuth = ref.onAuth,
          offAuth = ref.offAuth;
      onAuth(function (authData) {
        console.log(authData);
      });
      function getCurrentUser() {
        return ref.getAuth();
      }
      ...
      return {
        onAuth: onAuth,
        offAuth: offAuth,
        getCurrentUser: getCurrentUser,
        ...
      }
    }

在JavaScript中,传递函数以供稍后调用时,重要的是要注意调用该函数的作用域。例如,在定义闭包时,闭包将有自己的作用域,this可能不再指向我们的原始对象。使用fn.bind(...)解决了这个问题。

这可能会变得棘手,因为您正在使用的代码可能取决于特定的范围。诀窍是确保在将函数作为参数传递时作用域没有改变,这可以通过在传递之前显式地将方法绑定到原始对象来实现。

结账http://www.reactive.io/tips/2009/04/28/binding-scope-in-javascript/和http://alistapart.com/article/getoutbindingsituations深入探讨这个话题。