[React] 최신 Firebase에서 로그인 구현하기

2021. 11. 28. 00:11·React/Firebase
목차
  1. 설치
  2. Firebase_config.js
  3. .env
  4. Auth 관련
  5. 로그인 관련 함수

React의 Firebase 라이브러리가 업데이트 되면서 함수를 호출하는 방식이 바뀌었다.

거의 필수적으로 사용하는 Auth, Firestore, RealTimeDatabase의 최신 구문을 알아보자.

 

간단히 바뀐점에 대해 설명하자면 Class내에 선언되어있던 함수들을 모두 전역으로 전언해서 사용할 수 있게 바뀌었다.

예를들어 Email login 함수가 FirebaseAuth 내부에 선언되어 있어 이를 FirebaseAuth.emailLogin()과 같은 형태로 사용했어야 했다면,

최신 버전에서는 emailLogin(FirebaseAuth, email, password)의 형태로 사용하게끔 변경되었다.

 

 

설치

yarn add firebase

 

 

Firebase_config.js

import { initializeApp } from "firebase/app";
import { getAuth } from "firebase/auth";
import { getFirestore } from "firebase/firestore";
import { getDatabase } from "firebase/database";

const firebaseConfig = {
  apiKey: process.env.REACT_APP_API_KEY,
  authDomain: process.env.REACT_APP_AUTH_DOMAIN,
  projectId: process.env.REACT_APP_PROJECT_ID,
  storageBucket: process.env.REACT_APP_STORAGE_BUCKET,
  messagingSenderId: process.env.REACT_APP_MESSAGE_SENDER_ID,
  appId: process.env.REACT_APP_APP_ID,
  measurementId: process.env.REACT_APP_MEASUREMENT_ID,
  databaseURL: process.env.REACT_APP_DATABASE_URL,
};

const app = initializeApp(firebaseConfig);

export const authService = getAuth(app);
export const dbService = getFirestore();
export const realtimeDbService = getDatabase();

firebase_config.js 파일을 생성하고 위의 코드를 입력한다.

 

.env

  REACT_APP_API_KEY= ..
  REACT_APP_AUTH_DOMAIN= ..
  REACT_APP_PROJECT_ID= ..
  REACT_APP_STORAGE_BUCKET=..
  REACT_APP_MESSAGING_SENDER_ID =..
  REACT_APP_APP_ID = ..
  REACT_APP_MEASUREMENT_ID = ..
  REACT_APP_DATABASE_URL = ..

Firebase 콘솔을 참고해 값들을 입력하고 프로젝트 최상단에 .env 파일을 생성하고 삽입한다.

Firebase에 관련된 Secret key들을 관리하기 위해 별도로 환경변수 파일을 생성하자.

 

 

Auth 관련

Firebase 라이브러리는 로그인시 로그인 정보들을 자동으로 저장해주고, 실행 시 자동으로 로그인 정보를 읽어온다.

추가로 로그인 상태 변경시 체크하는 Observe가 있어 로그인 관련 함수의 코드를 간략하게 할 수 있다.

//로그인 상태 변경을 감지하는 함수
//웹 실행 시 최초 1회 해당 함수를 실행시켜 이전 로그인 기록이 있다면 불러옴.
//user와 관련된 provider나 main에서 선언후 setState하는 방식이 일반적

useEffect(() => {
    authService.onAuthStateChanged((user) => {
      if (user) {
        setIsLoggedIn(true);
      } else {
        setLogout();
      }
    });
  }, []);

 

로그인 관련 함수

import {
  createUserWithEmailAndPassword,
  getRedirectResult,
  GithubAuthProvider,
  GoogleAuthProvider,
  signInWithEmailAndPassword,
  signInWithRedirect,
  signOut,
} from "firebase/auth";
import { authService } from "../firebase_config";

//앞서 생성한 config파일과 Firebase/auth로 부터 함수들을 import



//Email로 가입하는 함수
//동작이 이루어지면 앞서 작성한 로그인 상태 감지 함수로 인해 user정보가 변수에 저장되고 setState가 발생
export async function registerWithEamil(email, password) {
  try {
    await createUserWithEmailAndPassword(authService, email, password).then(
      (e) => {}
    );
  } catch (e) {
    return e.message.replace("Firebase: Error ", "");
  }
}


//Email로 로그인하는 함수
export async function loginWithEamil(email, password) {
  try {
    await signInWithEmailAndPassword(authService, email, password);
  } catch (e) {
    return e.message.replace("Firebase: Error ", "");
  }
}


//Google, Github로 로그인하는 함수
export async function loginWithSocial(provider) {
  if (provider === "google") {
    try {
      const provider = new GoogleAuthProvider();
      await new signInWithRedirect(authService, provider);
      const result = await getRedirectResult(authService);
      if (result) {
        // const user = result.user;
      }
      return;
    } catch (error) {
      return error;
    }
  } else if (provider === "github") {
    try {
      const provider = new GithubAuthProvider();

      await new signInWithRedirect(authService, provider);
      const result = await getRedirectResult(authService);
      if (result) {
        // const user = result.user;
      }
      return;
    } catch (error) {
      return error;
    }
  }
}



//Logout 하는 함수
export async function logout() {
  await signOut(authService);
  return;
}

원하는 에러 처리가 있다면 에러 부분 정도만 수정 후 그대로 가져다 써도 무방하다.

Google, Github과 같은 소셜로그인은 Firebase 콘솔에서 몇 가지 설정이 필요하지만, 본 글에서는 생략하겠다.

 

저작자표시 비영리 변경금지 (새창열림)

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

[React] 최신 Firebase Real-Time DB 사용하기  (0) 2021.11.28
[React] 최신 Firebase Firestore 사용하기  (0) 2021.11.28
  1. 설치
  2. Firebase_config.js
  3. .env
  4. Auth 관련
  5. 로그인 관련 함수
'React/Firebase' 카테고리의 다른 글
  • [React] 최신 Firebase Real-Time DB 사용하기
  • [React] 최신 Firebase Firestore 사용하기
박유상의 개발블로그
박유상의 개발블로그
개발블로그
  • 박유상의 개발블로그
    박유상의 개발블로그
    박유상의 개발블로그
  • 전체
    오늘
    어제
    • 전체 (134)
      • Who am I (10)
        • Portfolio (4)
        • Reminiscence (5)
        • Oversea (1)
        • SiliconValley (0)
      • React (36)
        • React Basic (15)
        • React Tech (5)
        • JavaScript (7)
        • TypeScript (3)
        • CSS&HTML (3)
        • Firebase (3)
      • NodeJS (1)
        • NodeJS Basic (1)
      • Flutter (55)
        • Flutter Widget Design (5)
        • Flutter Widget Basic (8)
        • Flutter Tech (18)
        • Flutter Issue (7)
        • Flutter Web (6)
        • About Flutter (2)
        • Firebase (1)
        • Dev Env (1)
        • Dart (7)
      • Programming (31)
        • Web (1)
        • General (0)
        • Algorithm (25)
        • Python (1)
        • VS Code (2)
      • Django (0)
  • 블로그 메뉴

    • Who I AM
    • React
    • NodeJS
    • Flutter
    • Programming
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    리액트
    HTML
    DART
    flutter web
    react
    Redux
    TypeScript
    알고리즘
    파이썬
    JSON
    자바스크립트
    프로그래머스
    탐욕법
    Python
    useTranslation
    Lingory
    useState
    Flutter
    링고리
    Firebase
    플러터 웹
    웹
    CSS
    DP
    useRef
    포트폴리오
    map
    github
    플러터
    JavaScript
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
박유상의 개발블로그
[React] 최신 Firebase에서 로그인 구현하기

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.