【问题标题】:How to handle with auth/argument-error in Firebase web?如何处理 Firebase Web 中的 auth/argument-error?
【发布时间】:2017-03-20 21:20:48
【问题描述】:

我正在使用 Firebase 开发一个网络项目,我需要处理登录页面上的所有身份验证错误。

为什么我无法得到 error.code 等于 'auth/argument-error',就像我处理其他 'auth/something-error' 错误代码一样?

例如当我有一个登录表单并按下没有填写电子邮件和密码的按钮时,控制台中会抛出以下错误:

如何获取此错误对象并保存在变量中?

@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();
                });
        });
    };

【问题讨论】:

    标签: firebase firebase-authentication


    【解决方案1】:

    当电子邮件或密码未提供给 firebase 并且无法在 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);
    
        });
    
    
    };
    

    【讨论】:

      相关资源