为什么我超出了调用堆栈大小 - Firebase Auth

时间:2017-04-01 01:04:53

标签: javascript firebase firebase-authentication

这是我的代码。登录时我会半持续地得到此错误,但如果单击登录按钮两次,则每次都会发生此错误。

app.controller('login', ['$scope', '$state', '$rootScope', '$localStorage', '$location', 'userData', '$firebaseObject', 'firebase', '$timeout', function($scope, $state, $rootScope, $localStorage, $location, userData, $firebaseObject, firebase, $timeout) {
    var _ = firebase.database().ref()
    $scope.signin = function(user) {
        firebase.auth().signInWithEmailAndPassword(user.email, user.password).then(function(user) { 
            $localStorage.currentUser = user
            $localStorage.me = $firebaseObject(_.child('user/' + $localStorage.currentUser.uid))            
        }).catch(function(error) {
            console.log(error)
        });
    }
}]); 

我没有看到什么可能触发错误,它必须在此页面上,因为到目前为止,我还没有重定向到其他任何地方。

enter image description here

我认为这可能是我的错误:Error: Maximum call stack size exceeded on Angualr Ui Router State Change但如果我理解正确,这是由于重定向循环,我没有进行任何重定向,只是打开Firebase Auth会话正确吗?

更新: 删除两个$localStorage行后,错误不会发生,我的实施问题或$localStorage

1 个答案:

答案 0 :(得分:0)

好吧所以我找到了解决此问题的方法,将整个Firebase Auth用户对象写入$localStorage对象时会出现问题。不确定$localStorage有哪些限制,但某处存在问题。我的解决方案是只解析所需的数据并将其保存到 $scope.signin = function(user) { firebase.auth().signInWithEmailAndPassword(user.email, user.password).then(function(user) { serializeUser(user) }).catch(function(error) { swal('Oops', 'There was an error: ' + error.message, 'error') }); } var serializeUser = function(user) { var object = { email: user.email, uid: user.uid } $localStorage.currentUser = object }

{
  "context": {
    "currdate": "@sys-date:today"
  },
  "output": {
    "text": {
      "values": [
        "here it is $currdate"
      ],
      "selection_policy": "sequential"
    }
  }
}