# #javascript #reactjs #firebase #firebase-authentication
Вопрос:
Я пытаюсь аутентифицировать пользователя с помощью firebase.
Для аутентификации на основе электронной почты и пароля я хочу проверить, действительно ли электронное письмо, введенное пользователем в форме, принадлежит пользователю, я могу сделать это, отправив ссылку для подтверждения пользователю.
Итак, после того, как форма отправлена и все остальные проверки завершены, я попробовал следующий код:
firebase.auth().createUserWithEmailAndPassword(this.state.email,this.state.password)
.then(()=>{
var actionCodesettings={
url: 'https://localhost:3000/?email=' firebase.auth().currentUser.email,
handleCodeInApp: false
}
firebase.auth.currentUser.sendEmailVerification(actionCodesettings)
.then(()=>{
console.log("Email Sent")
})
.catch((error)=>{
console.log("Unexpected error occured")
})
})
.catch((error)=>{
var errorCode = error.code;
if(errorCode === 'auth/email-already-in-use'){
this.setState({
Message:"Email already Used"
})
return;
}
else if(errorCode === 'auth/invalid-email'){
this.setState({
Message:"Email already Used"
})
return;
}
else if(errorCode === 'auth/weak-password'){
this.setState({
Message:"Password is too Weak"
})
return;
}
})
}
Но я не получаю никакого электронного письма,и сообщение «Отправлено по электронной почте» не выходит из системы.
Ответ №1:
Вы получаете синтаксическую ошибку, потому что вы использовали firebase.auth.currentUser
вместо firebase.auth().currentUser
.
Причина, по которой вы не видите эту ошибку, заключается в том, что вы игнорируете ее, не обрабатывая коды ошибок, которых вы не ожидаете. Хороший способ выявить эти типы ошибок-использовать switch
инструкцию с default
резервным случаем.
firebase.auth().createUserWithEmailAndPassword(this.state.email,this.state.password)
.then((result) => {
var actionCodesettings={
url: 'https://localhost:3000/?email=' result.user.email,
handleCodeInApp: false
}
return result.user
.sendEmailVerification(actionCodesettings);
})
.then(() => {
this.setState({
Message:"Please check your email to verify it."
});
})
.catch((error)=>{
const errorCode = error.code;
switch (errorCode) {
case 'auth/email-already-in-use':
this.setState({
Message:"This email has already been used"
});
return;
case 'auth/invalid-email':
this.setState({
Message:"Email was invalid"
});
return;
case 'auth/weak-password':
this.setState({
Message:"Please use a more secure password"
});
return;
default:
console.error("Unexpected code while signing in and verifying user", error);
this.setState({
Message:"Unexpected error. Please contact support."
});
return;
}
});