Простой вход в Firebase выдает только ошибку ‘INVALID_EMAIL’

#error-handling #firebase #angularfire #firebasesimplelogin

# #обработка ошибок #firebase #угловой огонь #firebasesimplelogin

Вопрос:

первый вопрос по stackoverflow, поэтому, пожалуйста, скажите мне, недостаточно ли моей информации. Заранее благодарю.

Я пытаюсь реализовать firebase-simple-login, но единственный тип ошибки, который я получаю, — это «НЕВЕРНЫЙ адрес электронной почты» в функции входа. Если я ввожу неправильный пароль с существующим адресом электронной почты, он по-прежнему выдает неверное электронное письмо.

 $scope.signIn = function() {
        $rootScope.auth.$login('password', {
            email: $scope.email,
            password: $scope.password
        }).then(function(user) {
            console.log("user has email "   user.email);
        }, function(error) {
            if (error = 'INVALID_EMAIL') {
                console.log('email invalid or not signed up');
            } else if (error = 'INVALID_PASSWORD') {
                console.log('invalid password');
            } else {
                console.log(error);
            }
        });
    };
 

Для дополнительной справки; html с соответствующей формой

 <div class="form-group">
    <input type="email" class="form-control" placeholder="email" ng-model="email" />
</div>
<div class="form-group">
    <input type="password" class="form-control" placeholder="password" ng-model="password" />
</div>
<button type="submit" class="btn btn-success" ng-click="signIn()">Sign in</button>
 

Кажется, я не могу найти ничего полезного о типах ошибок в документах firebase, поэтому я надеюсь, что вы сможете помочь.

CreateUser вызывается как таковой:

  $scope.signUp = function() {
        $rootScope.auth.$createUser($scope.email, $scope.password, function(error,user) {
            if (!error) {
                console.log('User Id: '   user.uid   ', Email: '   user.email);
            }
        }).then(function(){
            $rootScope.auth.$login('password', {
                email: $scope.email,
                password: $scope.password
            });
        });
    };
 

Комментарии:

1. Вероятно, вам нужно сначала создать пользователя с помощью CreateUser ? Если нет, нам нужно посмотреть, что вы вводите в метод входа.

2. Вы проверили, что $scope.email правильно определен при вызове .login() ?

3. @Kato Большое вам спасибо за ответ. Я создаю пользователя через CreateUser, и, похоже, он работает нормально. Я могу регистрировать существующих пользователей и создавать новых пользователей. Я добавил CreateUser, поскольку я использую его для ответа на вопрос.

4. @RobDiMarco Большое вам спасибо за ответ. Я не уверен, что понимаю (я новичок). Недостаточно ли добавить ’email’ в ng-model и $ scope.email в функции входа? Как бы я определил это заранее?

5. @jimbo просто попробуйте console.log($scope.email) прямо перед вызовом $login() и посмотрите, что он содержит.

Ответ №1:

Это решение, которое я нашел после дальнейшей проверки функции ошибки. Кажется, вам нужно перейти в объект ошибки, чтобы error.code вместо just error , а также использовать оператор === вместо = . Я поднял $login() прямо из документации firebase, но, возможно, я что-то перепутал в процессе. В любом случае, вот рабочий код.

 function(error) {
            if (error.code === 'INVALID_EMAIL') {
                console.log('email invalid or not signed up');
            } else if (error.code === 'INVALID_PASSWORD') {
                console.log('invalid password');
} 
 

Комментарии:

1. Ах-ха! Рад, что вы все уладили. Извини, что я не заметил этого раньше.

2. Нет проблем, @Kato. Кажется, это не задокументировано таким образом (по крайней мере, нигде, что я могу найти), и кажется необычным, что переход к объекту ошибки необходим. В любом случае, спасибо за помощь.

Ответ №2:

На самом деле вы можете использовать сообщения об ошибках, предоставленные Firebase, вместо предложения if.

 function(error){
  if(error){
    console.log(error_code.message)
  }
}