2016-11-07 71 views
0

我正在使用Firebase处理Web项目,并且需要处理登录页面上的所有身份验证错误。如何在Firebase网站中处理auth/argument-error?

为什么我不能得到error.code等于'auth/argument-error'就像我对别人的'auth/something-error'错误代码所做的一样?

例如当我有没有填写电子邮件地址和密码登录窗体然后按下按钮,在控制台下面的错误被抛出:

enter image description here

我怎样才能得到这个错误对象,并保存在一个变量?

@Frank van Puffelen,请回答。

signin.js

vm.signIn = function() { 
     vm.loading = true; 
     return $q(function(resolve, reject) { 
      firebaseAuth.$signInWithEmailAndPassword(vm.email, vm.password) 
       .then(function(firebaseUser) { 
        console.log('[Firebase] User signed as', firebaseUser); 
        vm.loading = false; 
        resolve(); 
        $state.go('main'); 
       }).catch(function(error) { 
        console.error('[Code]', error.code); 
        console.error('[Message]', error.message); 
        switch (error.code) { 
         case 'auth/argument-error': 
          vm.translationId = 'IT DOENST WORK LIKE ERRORS BELOW'; 
          console.log('IT DOENST WORK LIKE ERRORS BELOW'); 
          break; 
         case 'auth/wrong-password': 
          vm.translationId = 'FIREBASE.AUTH.WRONG_PASSWORD.ERROR_MSG'; 
          break; 
         case 'auth/user-not-found': 
          vm.translationId = 'FIREBASE.AUTH.USER_NOT_FOUND.ERROR_MSG'; 
          break; 
         case 'auth/user-disabled': 
          vm.translationId = 'FIREBASE.AUTH.USER_DISABLED.ERROR_MSG'; 
          break; 
         case 'auth/invalid-email': 
          vm.translationId = 'FIREBASE.AUTH.INVALID_EMAIL.ERROR_MSG'; 
          break; 
         default: 
          vm.loading = false; 
          vm.translationId = error.message; 
        } 
        $translate(vm.translationId) 
         .then(function(translated) { 
          vm.loading = false; 
          toastr.error(translated); 
         }, function(translationId) { 
          // NOTE: Validar quando o catch dispara! 
          vm.translationId = translationId; 
         }); 
        vm.loading = false; 
        reject(); 
       }); 
     }); 
    }; 

回答

2

当不提供电子邮件或密码火力点和不能在catch块来处理这种情况。因为它是一个参数错误。下面是代码,检查电子邮件和密码是否存在,然后只调用firebase.auth()

$scope.login = function(data){ 
    $scope.err = null; 
    $scope.busy = true; 
    if(!data || !data.email || !data.password){ 
     $timeout(function(){ 
      $scope.err = { 
       code:'InvalidParms', 
       message: "Please provide correct email." 
      }; 
      $scope.busy = false; 
     },0); 
     return; 
    } 

    firebase.auth().signInWithEmailAndPassword(data.email,data.password).then(function(res){ 
     if(res){          
      $rootScope.user = res; 
      if(res.emailVerified){ 
       $location.path('/'); 
      }else{ 
       $timeout(function(){ 
        $scope.err = { 
         code:'EmailNotVerified', 
         message: "You email is not yet verified. Please verify your email. Click on resend verification mail if you haven't got a verification mail from us." 
        }; 
       },0); 
      } 
      // 
     } 
     $scope.busy = false; 
    }).catch(function(err){ 
     $timeout(function(){ 
      console.log(err); 
      $scope.busy = false; 
     },0); 

    }); 


};