Перехват исключения при создании пользователя firebase

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