0

我發現了一些奇怪的東西。請幫忙!AngularFire(Angular + Firebase)驗證錯誤延遲

$scope.login = function() { 
    ref.authWithPassword({ 
     email: $scope.user.email, 
     password: $scope.user.password 
    }, function(error, authData) { 
     if (error) { 
      console.log("Login Failed!", error); 
      $scope.message = error.toString(); 
     } else { 
      $location.path('/meetings'); 
      console.log("Authenticated successfully with payload:", authData); 
     } 
    }); 
} //login 

這是一個登錄功能和它的作品nicely.However,事情是,我得到error 3,我已提交了登錄後4秒。我注意到我的{{message}}$scope.message收到價值後沒有立即更新。我認爲Angular應該在它發生變化時立即顯示這個價值。 ?

我第二次點擊後,顯示錯誤。

這是我打印值:

<p class="error formerror" ng-show="message">{{message}}</p>

回答

1

你打電話authWithPassword,這是火力地堡的常規的JavaScript SDK的一部分。該API將啓動身份驗證過程並在身份驗證完成時調用您的函數。不幸的是,那時AngularJS不再知道你對$scope所做的任何更新。

爲了讓AngularJS瞭解更新的,包你的代碼中調用$timeout

$scope.login = function() { 
    ref.authWithPassword({ 
     email: $scope.user.email, 
     password: $scope.user.password 
    }, function(error, authData) { 
     $timeout(function() { 
      if (error) { 
       console.log("Login Failed!", error); 
       $scope.message = error.toString(); 
      } else { 
       $location.path('/meetings'); 
       console.log("Authenticated successfully with payload:", authData); 
      } 
     }); 
    }); 
} //login 

注意,正是因爲這個原因,AngularFire提供圍繞這些認證便利的包裝在其$firebaseAuth服務。請參閱section in the AngularFire guide on logging users in

您正在查找的包裝函數是$authWithPassword,請閱讀樣本how to use $authWithPassword in its API documentation