Firebase Authentication

Create firebase.js File

// Import the functions you need from the SDKs you need
import { initializeApp } from "firebase/app";
import { getAuth } from "firebase/auth";
import { getFirestore } from "firebase/firestore";
// TODO: Add SDKs for Firebase products that you want to use
// https://firebase.google.com/docs/web/setup#available-libraries

// Your web app's Firebase configuration
// For Firebase JS SDK v7.20.0 and later, measurementId is optional
const firebaseConfig = {
  apiKey: "***************************",
  authDomain:"***************************",
  projectId: "***************************",
  storageBucket: "***************************",
  messagingSenderId: "***************************",
  appId: "***************************",
  measurementId: "*************",
};

// Initialize Firebase
const app = initializeApp(firebaseConfig);
const db = getFirestore(app);

export { app, db };

Create useAuthentication.js

import React, { useEffect, useState } from "react";
import { getAuth, onAuthStateChanged } from "firebase/auth";
import { app } from "../config/Firebase";

const auth = getAuth(app);

const useAuthentication = () => {
  const [user, setUser] = useState();

  useEffect(() => {
    const unsubscribeFromAuthStatuChanged = onAuthStateChanged(auth, (user) => {
      if (user) {
        setUser(user);
        console.log(user);
      } else {
        setUser();
      }
    });
    return unsubscribeFromAuthStatuChanged;
  }, []);

  return user;
};

export default useAuthentication;

App.js

import React from "react";
import { NativeBaseProvider, extendTheme } from "native-base";
import { NavigationContainer } from "@react-navigation/native";

import AuthNavigator from "./src/navigation/AuthNavigator";
import useAuthentication from "./src/api/useAuthentication";
import AppNavigator from "./src/navigation/AppNavigator";

// Define the config
const config = {
  useSystemColorMode: false,
  initialColorMode: "dark",
};

// extend the theme
export const theme = extendTheme({ config });

export default function App() {
  const user = useAuthentication();
  return (
    <NativeBaseProvider>
      <NavigationContainer>
        {!user ? <AuthNavigator /> : <AppNavigator />}
      </NavigationContainer>
    </NativeBaseProvider>
  );
}

AuthNavigator.jsx

import React from "react";
import { createNativeStackNavigator } from "@react-navigation/native-stack";

import LoginScreen from "../screen/LoginScreen";
import SignupScreen from "../screen/SignupScreen";
import WelcomeScreen from "../screen/WelcomeScreen";

const Stack = createNativeStackNavigator();

const AuthNavigator = () => (
  <Stack.Navigator>
    <Stack.Screen
      name="Welcome"
      component={WelcomeScreen}
      options={{ headerShown: false }}
    />
    <Stack.Screen name="Login" component={LoginScreen} />
    <Stack.Screen name="Register" component={SignupScreen} />
  </Stack.Navigator>
);

export default AuthNavigator;

LoginScreen.js

import React, { useState } from "react";
import { Box, Button, Center, Input, Text } from "native-base";
import { getAuth, signInWithEmailAndPassword } from "firebase/auth";
import { app } from "../config/Firebase";

const auth = getAuth(app);

const LoginScreen = () => {
  const [email, setEmail] = useState("");
  const [password, setPassword] = useState("");

  const handleLogin = async () => {
    try {
      const result = await signInWithEmailAndPassword(auth, email, password);
      if (result) console.log("SUCCESS");
    } catch (error) {
      console.log(error);
    }
  };

  return (
    <Box>
      <Center>
        <Text>Login Screen</Text>
        <Input
          width={200}
          placeholder="email"
          onChangeText={(text) => setEmail(text)}
        />
        <Input
          width={200}
          placeholder="password"
          type="password"
          onChangeText={(text) => setPassword(text)}
        />
        <Button m="2" maxW={200} onPress={() => handleLogin()}>
          Login
        </Button>
      </Center>
    </Box>
  );
};

export default LoginScreen;

Last updated

Was this helpful?