如何处理 Firebase Web 中的身份验证/参数错误?

gcf*_*bri 9 firebase firebase-authentication

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

为什么我无法像处理其他“auth/something-error”错误代码那样获得 error.code equals 'auth/argument-error' ?

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

在此输入图像描述

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

@Frank van Puffelen,请回答。

登录.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();
                });
        });
    };
Run Code Online (Sandbox Code Playgroud)

小智 11

您需要有一个 div 或按钮或具有在新 RecaptchaVerifier 构造函数中指定的 ID 的任何元素。请看下面的代码

window.recaptchaVerifier = new RecaptchaVerifier("sign-in-button", {
  'callback': (response) => {
    console.log("prepared phone auth process");
  }
}, auth);
Run Code Online (Sandbox Code Playgroud)


Rav*_*ngh 5

当电子邮件或密码未提供给 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);

    });


};
Run Code Online (Sandbox Code Playgroud)