#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)
}
}