๐Ÿ’ป My Work/๐Ÿ”ฅ React

[React] Firebase - ์ด๋ฉ”์ผ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ํšŒ์›๊ฐ€์ž…(์‹ ๊ทœ ์‚ฌ์šฉ์ž ์ƒ์„ฑ) ๊ตฌํ˜„ํ•˜๊ธฐ

Jaeseo Kim 2022. 9. 20. 23:52

๋‹ค์–‘ํ•œ ํšŒ์›๊ฐ€์ž… ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•ด๋ณด์„ธ์š”.

 

https://firebase.google.com/docs/auth/web/password-auth?hl=ko#create_a_password-based_account 

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ธฐ๋ฐ˜ ๊ณ„์ •์„ ์‚ฌ์šฉํ•ด Firebase๋กœ ์ธ์ฆํ•˜๊ธฐ

Google์€ ํ‘์ธ ๊ณต๋™์ฒด๋ฅผ ์œ„ํ•œ ์ธ์ข…์  ํ‰๋“ฑ์„ ์ถ”๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ ์˜๊ฒฌ ๋ณด๋‚ด๊ธฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ธฐ๋ฐ˜ ๊ณ„์ •์„ ์‚ฌ์šฉํ•ด Firebase๋กœ ์ธ์ฆํ•˜๊ธฐ ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ด

firebase.google.com

firebase์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” API๋ฅผ ์ด์šฉํ•ด์„œ, ์ด๋ฉ”์ผ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ํšŒ์›๊ฐ€์ž…ํ•˜๊ธฐ๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

 

00. ์‹ ๊ทœ ์‚ฌ์šฉ์ž ์ƒ์„ฑ ๋ฐฉ๋ฒ•


Firebase ํ”„๋กœ์ ํŠธ์—์„œ ์‹ ๊ทœ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. createUserWithEmailAndPassword ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•
  2. Google ๋กœ๊ทธ์ธ ๋˜๋Š” Facebook ๋กœ๊ทธ์ธ๊ณผ ๊ฐ™์€ ์ œํœด ID ๊ณต๊ธ‰์—…์ฒด๋ฅผ ์ด์šฉํ•ด ์‚ฌ์šฉ์ž์˜ ์ตœ์ดˆ ๋กœ๊ทธ์ธ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

๋งจ ์ฒ˜์Œ์—” ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉ์ž๊ฐ€ ์•„๋ฌด๋„ ์—†๋‹ค๊ฐ€, ์ด๋ฉ”์ผ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ˜น์€ ์ œํœด ID ๊ณต๊ธ‰์—…์ฒด ์ตœ์ดˆ ๋กœ๊ทธ์ธ์„ ํ†ตํ•ด ์‹ ๊ทœ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์ถ”๊ฐ€๋˜๋ฉด ํšŒ์›๊ฐ€์ž…์ด ์™„๋ฃŒ๋œ ๊ฒƒ์ด์ฃ !

 

 

1. createUserWithEmailAndPassword ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ• (์ด๋ฒˆ ๋ธ”๋กœ๊ทธ์—์„œ ๋‹ค๋ฃฐ ์ฃผ์ œ์ž…๋‹ˆ๋‹ค.)

  • ์ด๋ฉ”์ผ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ ๊ทœ ์‚ฌ์šฉ์ž๋กœ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ๐ŸŒˆ

 

2. Google ๋กœ๊ทธ์ธ ๋˜๋Š” Facebook ๋กœ๊ทธ์ธ๊ณผ ๊ฐ™์€ ์ œํœด ID ๊ณต๊ธ‰์—…์ฒด๋ฅผ ์ด์šฉํ•ด ์‚ฌ์šฉ์ž์˜ ์ตœ์ดˆ ๋กœ๊ทธ์ธ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ๋ณธ์ธ์˜ ํ”„๋กœ์ ํŠธ์— ์ œํœด ID ๊ณต๊ธ‰์—…์ฒด ๊ณ„์ •์œผ๋กœ ์ตœ์ดˆ๋กœ ๋กœ๊ทธ์ธํ•จ์œผ๋กœ์จ ์‹ ๊ทœ ์‚ฌ์šฉ์ž๋กœ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.  โ˜๏ธ

 

01. ์ด๋ฉ”์ผ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ์‹ ๊ทœ ์‚ฌ์šฉ์ž ๊ฐ€์ž… ๊ตฌํ˜„


https://avoc-o-d.tistory.com/50

 

[React] Firebase - Authentication์œผ๋กœ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ

https://firebase.google.com/?hl=ko&gclid=CjwKCAjwpqCZBhAbEiwAa7pXeX-_LGJVKKRu3WA1Zbs-awSKivk12siAqSNzd60QEYrX7TKbOp59MxoCHK0QAvD_BwE&gclsrc=aw.ds Firebase Firebase๋Š” ๊ณ ํ’ˆ์งˆ ์•ฑ์„ ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•˜๊ณ  ๋น„์ฆˆ..

avoc-o-d.tistory.com

์œ„ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ firebase ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์ฃผ๊ณ ,

 

src/service/firebase.js ์—์„œ createUserWithEmailAndPassword๋ฅผ import ํ•˜์—ฌ ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก exportํ•ด์ค๋‹ˆ๋‹ค.

๐Ÿ“Œ createUserWithEmailAndPassword ์—๋Š” auth๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•„์š”ํ•˜๋‹ˆ, auth๋„ export ํ•ด์ค๋‹ˆ๋‹ค!

import {
  getAuth,
  signInWithEmailAndPassword,
  createUserWithEmailAndPassword,
  GoogleAuthProvider,
} from "firebase/auth";

/** ํ”„๋กœ์ ํŠธ config */
const firebaseConfig = {
  apiKey: process.env.REACT_APP_FIREBASE_API_KEY,
  ...
};

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

// Authentication SDK ์ถ”๊ฐ€ ๋ฐ ์ดˆ๊ธฐํ™”
// Initialize Firebase Authentication and get a reference to the service
const auth = getAuth(app);

export {
  auth,
  signInWithEmailAndPassword,
  createUserWithEmailAndPassword,
  googleAuthProvider,
};

 

์ €๋Š” ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€๋ฅผ SignUp.js๋กœ ์ƒ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” SignUp.js ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์ด๋ฉ”์ผ, ๋น„๋ฐ€๋ฒˆํ˜ธ form์„ ์ œ์ถœํ•จ์œผ๋กœ์จ ํšŒ์›๊ฐ€์ž…์„ ์ง„ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

ํŠนํžˆ, catch ์—์„œ ๊ฑธ๋ฆฌ๋Š” ํšŒ์›๊ฐ€์ž… ์˜ค๋ฅ˜๋Š” ์ด๋ฏธ firebase์—์„œ ์ •ํ•ด์ง„ ์ด๋ฉ”์ผ ์ •๊ทœ์‹๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ •๊ทœ์‹์— ๋”ฐ๋ฅธ ์ฝ”๋“œ๊ฐ’์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋‹ˆ๊นŒ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ทธ์— ๋”ฐ๋ฅธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋งค์šฐ ๊ฐ„ํŽธํ•˜์ฃ !!! ๐Ÿ”ฅ๐Ÿ”ฅ

...

async function handleSubmit(event) {
    event.preventDefault();
    setEmailLog(false);
    setPasswordLog(false);

    /** ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฒ€์‚ฌ */
    if (validatePassword()) {
      await createUserWithEmailAndPassword(auth, email, password)
        .then((res) => {
        
          // ํšŒ์›๊ฐ€์ž… ์„ฑ๊ณต ์‹œ ์ˆ˜ํ–‰ํ•  ์ฝ”๋“œ
          
        })
        .catch((err) => {
          switch (err.code) {
            case "auth/email-already-in-use": {
              return setError("์ด๋ฏธ ์‚ฌ์šฉ์ค‘์ธ ์ด๋ฉ”์ผ์ž…๋‹ˆ๋‹ค.");
            }
            case "auth/invalid-email": {
              return setError("์ด๋ฉ”์ผ์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”");
            }
            case "auth/weak-password": {
              return setError(
                "์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๋น„๋ฐ€๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค.\n๋‹ค๋ฅธ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด ์ฃผ์„ธ์š”."
              );
            }
            case "auth/operation-not-allowed": {
              return setError("operation-not-allowed \n๊ด€๋ฆฌ์ž์—๊ฒŒ ๋ฌธ์˜ํ•˜์„ธ์š” ");
            }
          }
        });
    }
  }
  
  ...

 

02. ํšŒ์›๊ฐ€์ž… ์ž…๋ ฅ๊ฐ’ ์ œ์–ด


์ž…๋ ฅ๊ฐ’์ด ํ•˜๋‚˜๋ผ๋„ ๋น ์ ธ์žˆ์œผ๋ฉด(์ด๋ฉ”์ผ, ๋น„๋ฐ€๋ฒˆํ˜ธ, ๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ, ๊ฐœ์ธ์ •๋ณด ์ˆ˜์ง‘ ๋™์˜ ์ฒดํฌ ๋ฐ•์Šค), ํšŒ์›๊ฐ€์ž… ํ•˜๊ธฐ ๋ฒ„ํŠผ์ด ํ™œ์„ฑํ™” ๋˜์ง€ ์•Š๊ฒŒ ํ•˜์—ฌ ํšŒ์›๊ฐ€์ž…์ด ๋ถˆ๊ฐ€ํ•˜๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

 

๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ ๋‚ด์šฉ์ด ๋‹ค๋ฅด๋ฉด ํšŒ์›๊ฐ€์ž…์ด ๋ถˆ๊ฐ€ํ•˜๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” SignUp.js ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ์ด ๊ฐ™์€์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

  /** ๋น„๋ฐ€๋ฒˆํ˜ธ ๋งž๋Š”์ง€ ๊ฒ€์‚ฌ */
  function validatePassword() {
    let isValid = true;
    if (password !== "" && confirmPassword !== "") {
      if (password !== confirmPassword) {
        isValid = false;
        setError("๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋งž์ง€ ์•Š์Šต๋‹ˆ๋‹ค.");
      }
    }
    
    ...
    
    return isValid;
  }

 

์ด๋ฉ”์ผ ์ •๊ทœ์‹์— ๋”ฐ๋ผ ์ž…๋ ฅํ•˜์ง€ ์•Š์•„, ํšŒ์›๊ฐ€์ž…์ด ๋ถˆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

 

๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋„ˆ๋ฌด ์งง๊ฑฐ๋‚˜ ๋‹จ์ˆœ ์ˆซ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค๋ฉด ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ์ธ์‹ํ•˜์—ฌ, ํšŒ์›๊ฐ€์ž…์ด ๋ถˆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋ฏธ ๊ฐ€์ž…ํ•œ ์ด๋ฉ”์ผ์ด๋ผ๋ฉด, ํšŒ์›๊ฐ€์ž…์ด ๋ถˆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

 

 

 


๋‹‰๋„ค์ž„์ฒ˜๋Ÿผ ์‚ฌ์šฉ์ž ์‹๋ณ„์„ ์œ„ํ•œ display ID ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์•„๋ž˜์˜ API๋ฅผ ํ†ตํ•ด ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

https://firebase.google.com/docs/auth/web/manage-users?hl=ko 

 

Firebase์—์„œ ์‚ฌ์šฉ์ž ๊ด€๋ฆฌํ•˜๊ธฐ

Google์€ ํ‘์ธ ๊ณต๋™์ฒด๋ฅผ ์œ„ํ•œ ์ธ์ข…์  ํ‰๋“ฑ์„ ์ถ”๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ ์˜๊ฒฌ ๋ณด๋‚ด๊ธฐ Firebase์—์„œ ์‚ฌ์šฉ์ž ๊ด€๋ฆฌํ•˜๊ธฐ ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ด ์ •๋ฆฌํ•˜๊ธฐ ๋‚ด ํ™˜๊ฒฝ์„ค์ •์„ ๊ธฐ์ค€์œผ๋กœ ์ฝ˜

firebase.google.com

ex ) ๋‹‰๋„ค์ž„ ์ž…๋ ฅ ์ ˆ์ฐจ๊ฐ€ ์žˆ๋Š” ํšŒ์›๊ฐ€์ž… ์ˆœ์„œ

  1. ํšŒ์›๊ฐ€์ž… ์ง„ํ–‰
    1. createUserWithEmailAndPassword ์ด์šฉํ•˜์—ฌ ์ด๋ฉ”์ผ, ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ํšŒ์›๊ฐ€์ž…
    2. ์ œํœด ID ๊ณต๊ธ‰์—…์ฒด ์ตœ์ดˆ ๋กœ๊ทธ์ธ
  2. ๋ณ„๋„์˜ ํŽ˜์ด์ง€ ํ˜น์€ ๋ชจ๋‹ฌ์ฐฝ์„ ์ด์šฉํ•˜์—ฌ ๋‹‰๋„ค์ž„ ์ž…๋ ฅ
  3. ์ž…๋ ฅ๋œ ๋‹‰๋„ค์ž„์„ displayName์— ๋Œ€์ž