BABIL_PROJECT/Firebase

Firebase (signIn & signUp)

ForteQook 2022. 4. 7. 18:18

팀원의 pull request 에 대한 코드 리뷰 중, auth 관련 사항들을 redux에 적용시켰다.

다음은 간략한 개발 내역이다.

 

먼저 firebase.js에 관련 모듈을 모두 import 한다.

앱에서 쓸일이 있으면 참조만 만들어 export 한다.

import { initializeApp } from "firebase/app";
import { 
    getAuth,                        // authentication 설정
    signInWithPopup,                // google 로그인을 팝업창에 띄우기 위해
    GoogleAuthProvider,             // google login 기능
    signInWithEmailAndPassword,     // email 로그인
    createUserWithEmailAndPassword, // email 회원가입
  } from 'firebase/auth';

const firebaseConfig = {
  apiKey: "AIzaSyC-InRZiZLyM9MWenviGWknDuJR-XPbQH0",
  authDomain: "babil-1d129.firebaseapp.com",
  databaseURL: "https://babil-1d129-default-rtdb.firebaseio.com",
  projectId: "babil-1d129",
  storageBucket: "babil-1d129.appspot.com",
  messagingSenderId: "607027316130",
  appId: "1:607027316130:web:ba6c705f57801effc3defb",
  measurementId: "G-87B6KT8RG5"
};

const app = initializeApp(firebaseConfig);

export const auth = getAuth();
export const createUserEmail = (auth, email, password) => createUserWithEmailAndPassword(auth, email, password);
export const signInEmail = (auth, email, password) => signInWithEmailAndPassword(auth, email, password);

 

firebase의 문서를 참고하여 액션을 만든다. 하단 액션 둘 다 Promise를 반환하는데, 마침 컴포넌트에서도 promise로 받아올 것을 가정하고 액션을 불러오고 있다. 다음은 관련 링크이다.

import {
    SIGN_IN,
    SIGN_UP,
} from '../types';

import {
    auth,
    createUserEmail,
    signInEmail
} from '../../utils/firebase';

export const signIn = async (data) => {
    const request = await signInEmail(auth, data.email, data.password)
    .then((userCredential) => {
        return user = userCredential.user;
    }).catch((error) => {
        console.log(error)
        return false
    })
    return {
        type: SIGN_IN,
        payload: request
    }
}

export const signUp = async (data) => {
    const request = await createUserEmail(auth, data.email, data.password)
    .then((userCredential) => {
        return user = userCredential.user;
    }).catch((error) => {
        console.log(error)
        return false
    })
    return {
        type: SIGN_UP,
        payload: request
    }
}

 

다음은 리듀서인데, 이전 fs_app에서 axios로 해서 email을 받아왔던것과는 다르게, 그냥 response 로 user 가 있는지만 확인할거라 payload 자체만 받아온다.

 

auth_reducer.js

import {
    SIGN_IN,
    SIGN_UP
} from '../types';

// Define INITIAL_STATE, if needed.

export default function(state={}, action) {
    switch(action.type) {
        case SIGN_IN :
            return {
                ...state,
                user: action.payload || false
            }
        case SIGN_UP :
            return {
                ...state,
                user: action.payload || false
            }
        default :
            return state
    }
}

 

'BABIL_PROJECT > Firebase' 카테고리의 다른 글

자동 로그인 구현  (0) 2022.05.10
모듈 등록 가능 여부 확인  (0) 2022.05.02
단일 항목 선택 리스트  (0) 2022.05.01
BABIL_DB스키마  (0) 2022.04.13
오토바이 DB  (0) 2022.04.13