import React, { useState, useEffect } from 'react'; import { Alert, Button, View, Text, TextInput, TouchableWithoutFeedback, Keyboard } from "react-native"; import auth, { FirebaseAuthTypes } from '@react-native-firebase/auth'; // This code is beginning of Auth Implementation - actual implementation will differ and involve more UI // Does not have a restart or proper handling of code confirmation, should only be used for obtaining token/testing // Currently working for Android builds, iOS has open issue #56 export default function Login() { const [phoneNumber, setPhoneNumber] = useState(''); const [code, setCode] = useState(''); const [user, setUser] = useState(null); const [confirm, setConfirm] = useState(null); async function onAuthStateChanged(user: any) { setUser(user); if (user) { // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars const token = await auth().currentUser?.getIdToken(); // To debug/check token & user return, use these logs // console.log(token) // token log // console.log(user) // user log } } async function signInWithPhoneNumber(phoneNumber: string) { if (!phoneNumber) { return Alert.alert('Please enter a valid phone number with a country code'); } try { const confirmation = await auth().signInWithPhoneNumber(phoneNumber); setConfirm(confirmation); } catch (err) { // TODO: implement more robust error handling by parsing err message console.warn(err) Alert.alert( 'There was an error. Make sure you are using a country code (ex: +1 for US)' ); } } async function confirmCode() { try { await confirm?.confirm(code); } catch { Alert.alert('Invalid code, please try again.'); } } useEffect(() => { const subscriber = auth().onAuthStateChanged(onAuthStateChanged); return subscriber; }, []); return ( Keyboard.dismiss()}> setPhoneNumber(value)} /> {confirm && ( setCode(value)} /> )}