#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, вам нужно проверить, был ли вход в систему успешным в . Затем функция