#javascript #firebase #error-handling #try-catch
#javascript #firebase #обработка ошибок #попытка-перехват
Вопрос:
Я учусь программировать и создаю простой трекер расходов, используя react native expo и firebase. Я пытаюсь перехватить ошибку, которую выдает firebase.auth().createUserWithEmailAndPassword, когда кто-то пытается зарегистрироваться по электронной почте, которая уже использовалась. В принципе, я бы хотел, чтобы это произошло, если создание пользователя выдает ошибку, дайте пользователю какое-то уведомление и не переходите к «Home».
Это функция для моей кнопки регистрации, которая находится в компоненте SignIn.js :
const pressSignUp = () => {
if (emailFormatCheck(email) amp;amp; passwordFormatCheck(pass)) {
try {
emailSignUp(email, pass);
} catch (error) {
console.log('HELLO');
console.log(error);
}
navigation.navigate('Home');
}
};
Вот код для создания учетной записи с использованием firebase, найденный в файле с именем email-sign-up.js:
import firebase from './fb';
const emailSignUp = (email, password) => {
firebase.auth().createUserWithEmailAndPassword(email.trim(), password);
};
export default emailSignUp;
Однако я не получил эти журналы для отображения pressSignUp()
. Не срабатывает ли catch? Спасибо, что посмотрели. Любые советы приветствуются!
Ответ №1:
Вам нужна асинхронная функция на вашей странице:
import {AuthContext} from '../navigation/AuthProvider';
const SignupScreen = ({navigation}) => {
const [email, setEmail] = useState();
const [password, setPassword] = useState();
const {register} = useContext(AuthContext);
// your input buttons here
<FormButton
buttonTitle="Sign Up"
onPress={() => register(email, password)}
/>
AuthProvider.js
import React, {createContext, useState} from 'react';
import auth from '@react-native-firebase/auth';
export const AuthContext = createContext();
export const AuthProvider = ({children}) => {
const [user, setUser] = useState(null);
return (
<AuthContext.Provider
value={{
user,
setUser,
login: async (email, password) => {
try {
await auth().signInWithEmailAndPassword(email, password);
} catch (e) {
if (e.code === 'auth/invalid-email') {
alert('Invalid Email Address');
} else if (e.code === 'auth/wrong-password') {
alert('Incorrect Password');
} else if (e.code === 'auth/too-many-requests') {
alert('Too many attempts, try later.');
} else if (e.code === 'auth/user-not-found') {
alert('Email not found, please create new account.');
} else {
console.log(e);
}
}
},
guest: async () => {
try {
await auth().signInAnonymously();
} catch (e) {
console.log(e);
}
},
register: async (email, password) => {
try {
await auth().createUserWithEmailAndPassword(email, password);
} catch (e) {
console.log(e);
}
},
logout: async () => {
try {
await auth().signOut();
} catch (e) {
console.log(e);
}
},
}}>
{children}
</AuthContext.Provider>
);
};