【问题标题】:$firebaseAuth with AngularFire 2.0.1 and Firebase 3.0.5$firebaseAuth 与 AngularFire 2.0.1 和 Firebase 3.0.5
【发布时间】:2016-10-30 22:42:18
【问题描述】:

我正在尝试升级到 Firebase 3 和 AngularFire 2。

我在应用程序的配置阶段运行了initializeApp

let firebaseConfig = { apiKey: config.fbSecret, authDomain: config.firebaseAuthDomain, databaseURL: config.firebaseBase }, fbApp = firebase.initializeApp(firebaseConfig); let baseRef = firebase.database().ref()

然后“提供”baseRef 以注入其他模块(就像我在旧版本中所做的那样):

$provide.value('FirebaseBase', baseRef);

这样我就可以将FirebaseBase 注入服务模块并使用例如FirebaseBase.child('profile').

这不会产生任何错误,但是当应用程序运行时我在控制台中收到此错误:

angular.js:4576 Uncaught Error: No Firebase App '[DEFAULT]' has been created - call Firebase App.initializeApp().

没有迹象表明错误来自哪里,但我在run阶段有一些身份验证代码:

$firebaseAuth.$onAuthStateChanged(..

我猜它可能来自那里。我尝试遵循迁移指南,但似乎没有任何现实生活中的示例,而且我不清楚新的 AngularFire 与firebase.initializeApp 的关系。

在任何地方都有示例应用程序吗?我错过了什么吗?

【问题讨论】:

  • 在同一个应用中多次调用 firebase.initializeApp() 时会出现此错误。你应该只调用一次。你确定你只运行你的配置代码一次吗?您实际上是在代码中的其他位置调用 initializeApp() 吗?您能否更新您的答案以包含您的设置代码?
  • 这是一个有角度的应用程序。据我所知,配置只能在启动时运行一次。 (工作)应用程序的结构并没有真正改变。 InitializeApp 不在客户端应用程序的其他任何地方运行。该消息似乎表明 initializeApp 根本没有运行,而不是它已经运行了多次。那是错的吗?真的不可能发布所有的设置代码,因为它有很多。
  • 啊,是的,我看错了,对不起。在您开始使用 Firebase 之前,您的配置代码似乎并未真正运行。如果没有看到您的设置代码,我不确定如何为您提供帮助。尝试减少它,您可能会自己发现问题。另外,您是否考虑过使用 AngularFire (github.com/firebase/angularfire) 来简化 Angular 和 Firebase 的结合使用?

标签: angularjs firebase firebase-realtime-database angularfire2


【解决方案1】:

您需要在 Angular 代码中的 run 块的开头调用初始化,因为您试图在那里进行授权,我在之前的一些 Firebase 集成中犯了这个错误

angular.module('starter', ['ionic', 'starter.controllers', 'starter.services', 'ngCordova'])

  .run(function ($ionicPlatform, FirebaseDB, $rootScope, $state) {

    FirebaseDB.initialize();

    // for authentication, managing the state if error..
    $rootScope.$on('$stateChangeError',
      function (event, toState, toParams, fromState, fromParams, error) {

        // if the error is "NO USER" the go to login state
        if (error === "NO USER") {
          event.preventDefault();
          $state.go('login', {});
        }
      });

  })

在我的 firebaseService 中

  .factory('FirebaseDB', function ($q, $state, $timeout) {
    var instance, storageInstance, unsubscribe, currentUser = null
    var initialized = false

    return {
      initialize: function () {

        // Not initialized so... initialize Firebase
        var config = {
            //SET YOUR CONFIG BLOCK HERE
        };

        // initialize database and storage
        instance = firebase.initializeApp(config);
        storageInstance = firebase.storage();

        // listen for authentication event, dont start app until I 
        // get either true or false
        unsubscribe = firebase.auth().onAuthStateChanged(function (user) {
          currentUser = user
          console.log("got user..", currentUser);
        })
      },
    }
  })

【讨论】:

  • 谢谢正在寻找角度初始化的最佳实践。我遇到的所有文档都放在 index.html 中。从哪里得到这些信息?
  • 这只是我们在所有应用程序中使用的一种方法,只是将其放在 index.html 中似乎不合适
【解决方案2】:

如果你把它放在运行短语中,它会修复它。

【讨论】:

  • 这个答案不清楚,应该进一步发展。请以有助于所有用户的方式解释答案,而不仅仅是提出问题的用户。
猜你喜欢
  • 1970-01-01
  • 2016-11-28
  • 1970-01-01
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多