2017-04-01 23 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 
    } 
相關問題