Проверка подлинности на основе Firebase JavaScript завершается успешно

#javascript #firebase #firebase-authentication

#javascript #firebase #firebase-аутентификация

Вопрос:

Как узнать, прошла ли аутентификация успешно, используя следующий код аутентификации электронной почты Firebase?

 firebase.auth().signInWithEmailAndPassword(email, password).catch(function(error) {
            // Handle Errors here.
            var errorCode = error.code;
            var errorMessage = error.message;

            if (errorCode === 'auth/wrong-password') {
              alert('Wrong password.');
            } else {
              alert(errorMessage);         
            }

            console.log(error);
        });
  

Я понимаю, что легко понять, была ли аутентификация неудачной, однако, как мне узнать, смог ли пользователь войти в систему с предоставленными учетными данными? Похоже, что для «успешного» входа в систему нет обратного вызова. В настоящее время у меня есть форма входа в систему, и я хочу перейти к успешному входу в систему.

Ответ №1:

firebaser здесь

ответ @ksav показывает предпочтительный способ определения того, когда пользователь входит в наш выход.

Для полноты я хочу показать второй способ обнаружения этого, который является прямым ответом на signInWithEmailAndPassword :

 firebase.auth().signInWithEmailAndPassword(email, password).then(function(user) {
   // user signed in
}).catch(function(error) {
    var errorCode = error.code;
    var errorMessage = error.message;

    if (errorCode === 'auth/wrong-password') {
        alert('Wrong password.');
    } else {
        alert(errorMessage);         
    }
    console.log(error);
});
  

Вызов then() будет вызван, когда пользователь войдет в систему.

Причина, по которой мы не подчеркиваем этот подход в нашей документации, заключается в том, что он пропустит много ситуаций. Например:

  • когда пользователь перезагружает страницу, then() он не будет вызван. Обратный onAuthStateChanged() вызов с другой стороны, тогда тоже будет вызван.
  • пользователь выходит из системы (например, если его недолговечный токен не может быть обновлен), catch() он не будет вызван. Обратный onAuthStateChanged() вызов с другой стороны, тогда тоже будет вызван.

Если вы хотите явно отвечать на то, когда пользователь активно входил в систему, подход в моем ответе может быть полезен. Но в большинстве случаев мы рекомендуем вам использовать подход, приведенный в ответе @ksav.

Ответ №2:

Получить текущего пользователя, вошедшего в систему


Рекомендуемый способ получить текущего пользователя — установить наблюдателя для объекта аутентификации:

 firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    // User is signed in.
  } else {
    // No user is signed in.
  }
});
  

Документы: https://firebase.google.com/docs/auth/web/manage-users

Ответ №3:

Если ничего не было кэшировано, значит, оно прошло успешно.

 var isSuccessful = true
firebase.auth().signInWithEmailAndPassword(email, password).catch(function(error) {
        // Handle Errors here.
        var isSuccessful = false
        var errorCode = error.code;
        var errorMessage = error.message;

        if (errorCode === 'auth/wrong-password') {
          alert('Wrong password.');
        } else {
          alert(errorMessage);         
        }

        console.log(error);
    })
    finally {
     if(isSuccessful)
         //Success!
    }
  

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

1. Просто чтобы все знали, почему этот ответ отклонен — вход в систему является асинхронным. Таким образом, нет смысла проверять переменную isSuccessful сразу после вызова signInWithEmailAndPassword, вам нужно проверить, был ли вход в систему успешным в . Затем функция