2017-04-01 18 views
0

这是我的代码。我在登录时会半错误地得到这个错误,但是如果登录按钮被点击两次,它每次都会发生。为什么我会超出调用堆栈大小 - Firebase身份验证

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,但如果我的理解是正确的,这是由于重定向循环,我没有做任何改变方向,只是打开火力地堡验证会话是否正确?

UPDATE:同时去除$localStorage线后,不会发生错误,问题,我实现或$localStorage

回答

0

好吧,让我找到了解决这个问题,它似乎写整个火力地堡验证用户对象的$localStorage对象时出现问题。不知道$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 
    } 
相关问题