๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ

React native Login with google, firebase

youngdeok 2023. 3. 2. 19:29

2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ ํ•  ๊ฒƒ์ด๋‹ค. 1๋ฒˆ์งธ google 2๋ฒˆ์งธ firebase๋ฅผ ํ†ตํ•ด์„œ

https://devbksheen.tistory.com/entry/React-Native-Firebase๋กœ-ํšŒ์›-์ธ์ฆํ•˜๊ธฐ

https://juzero-space.tistory.com/288

  1. google login

ํ•„์š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

npm install @react-native-firebase/app --save npm install @react-native-firebase/auth --save npm install @react-native-google-signin/google-signin --save

firebase์—์„œ ์ƒˆ ์žฌ๊ณต์—…์ฒด ์ถ”๊ฐ€.

import auth from "@react-native-firebase/auth";
import {GoogleSignin} from '@react-native-google-signin/google-signin';
export const googleSigninConfigure = () => {
    GoogleSignin.configure({
      webClientId:
        '776883032422-hla5brdij4eenmhhat84bdtu5fbvhncc.apps.googleusercontent.com',
    });
  };
  
export const onGoogleButtonPress = async () => {
    const {idToken} = await GoogleSignin.signIn();
    const googleCredential = auth.GoogleAuthProvider.credential(idToken);
    return auth().signInWithCredential(googleCredential);
  };
const signInWithGoogle = async () => {
    try {
      await onGoogleButtonPress()
      props.navigation.navigate("HomeScreen")
    } catch(e) {
      Alert.alert("๋กœ๊ทธ์ธ์— ์‹คํŒจ์…จ์Šต๋‹ˆ๋‹ค");
    }
  }

์œ„์˜ ์ฝ”๋“œ๋ฅผ ์›ํ•˜๋Š” ๊ณณ์— ์‚ฝ์ž…ํ•˜๋ฉด ๋

google login

  1. firebase email

2-1 ๋กœ๊ทธ์ธ

ํ•„์š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

npm install @react-native-firebase/app --save npm install @react-native-firebase/auth --save

์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ œ๊ณต์—…์ฒด์— email์„ ์ถ”๊ฐ€ํ•ด ์ค€๋‹ค.

export function signIn({email, password}) {
  return auth().signInWithEmailAndPassword(email, password);
}

์ถ”๊ฐ€!

const [email, setEmail] = useState('');
const [password, setpassword] = useState('');

๊ฐ’์„ ๋ฐ›์•„ ์˜ค๊ธฐ ์œ„ํ•ด email, password๋ฅผ ๋ฐ›์„ ๋ณ€์ˆ˜ ์ถ”๊ฐ€ (๋ณ€์ˆ˜ ์ด๋ฆ„์„ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋œฌ๋‹ค.)

const signInSubmit = async () => {
    const info = {email, password};
    try {
      const {user} = await signIn(info);
      console.log(user);
      dispatch({type:'login',step: email})
      console.log(checkLogin);
      props.navigation.navigate("HomeScreen")
    } catch (e) {
      Alert.alert("๋กœ๊ทธ์ธ์— ์‹คํŒจ์…จ์Šต๋‹ˆ๋‹ค");
    }
  }

  const signInWithGoogle = async () => {
    try {
      await onGoogleButtonPress()
      props.navigation.navigate("HomeScreen")
    } catch(e) {
      Alert.alert("๋กœ๊ทธ์ธ์— ์‹คํŒจ์…จ์Šต๋‹ˆ๋‹ค");
    }
  }

์ฐธ๊ณ ๋กœ secureTextEntry={true}๋ฅผ input text์•ˆ์— ์ง‘์–ด ๋„ฃ์–ด password์˜ ๋ณด์•ˆ์„ฑ์„ ์ง€ํ‚จ๋‹ค.

2-2 ํšŒ์›๊ฐ€์ž…

export function signUp({email, password}) {
  return auth().createUserWithEmailAndPassword(email, password);
}

์ถ”๊ฐ€

const resultMessages = {
  "auth/email-already-in-use": "์ด๋ฏธ ๊ฐ€์ž…๋œ ์ด๋ฉ”์ผ์ž…๋‹ˆ๋‹ค.",
  "auth/wrong-password": "์ž˜๋ชป๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค.",
  "auth/user-not-found": "์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ณ„์ •์ž…๋‹ˆ๋‹ค.",
  "auth/invalid-email": "์œ ํšจํ•˜์ง€ ์•Š์€ ์ด๋ฉ”์ผ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค."
}
// ์ฝ”๋“œ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์˜ค๋ฅ˜๋ฅผ ๋ฑ‰๋Š”๋ฐ ๊ทธ๊ฑธ ์ด์šฉํ•œ ์˜ค๋ฅ˜ ๊ฐ์ฒด์ด๋‹ค.

const LoginScreen = (props) => {
  const [email, setEmail] = useState('');
  const [password, setPassword] = useState('');
  const [Checkpassword, setCheckPassword] = useState('');

  const signUpSubmit = async () => { // ํšŒ์›๊ฐ€์ž… ํ•จ์ˆ˜
    const info = {email, password};
    console.log(info)
    try {
      const {user} = await signUp(info);
      console.log(user);
      props.navigation.goBack()
    } catch (e) {
      const alertMessage = resultMessages[e.code] ?
      resultMessages[e.code] : "์•Œ ์ˆ˜ ์—†๋Š” ์ด์œ ๋กœ ํšŒ์›๊ฐ€์ž…์— ์‹คํŒจํ•˜์˜€์Šต๋‹ˆ๋‹ค.";
      Alert.alert("ํšŒ์›๊ฐ€์ž… ์‹คํŒจ", alertMessage);
    }
  }

๋~