[TIL/React] 2023/08/02

์›๋ฏผ๊ด€ยท2023๋…„ 8์›” 2์ผ

[TIL]

๋ชฉ๋ก ๋ณด๊ธฐ
94/201
post-thumbnail

Authentication in ReactJS Using Firebase ๐ŸŸ 

ํ”„๋กœ์ ํŠธ์˜ ์ง„ํ–‰์„ ์œ„ํ•ด, ๋กœ๊ทธ์ธ๊ณผ ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ(Authentication)์— ๋Œ€ํ•œ ํ•™์Šต์€ ํ•„์ˆ˜๋ถˆ๊ฐ€๊ฒฐํ•˜๋‹ค. ์™ธ๊ตญ์ธ ํ”„๋กœ๊ทธ๋ž˜๋จธ ๋ˆ„๋‹˜์˜ ์ž๋ฃŒ๋ฅผ ์ฐธ๊ณ ํ–ˆ๋‹ค.

reference: https://www.youtube.com/watch?v=Vv_Oi7zPPTw

src/App.js ๐ŸŸก

import React from "react";
import SignIn from "./components/auth/SignIn";
import SignUp from "./components/auth/SignUp";
import AuthDetail from "./components/AuthDetail";

function App() {
  return (
    <div>
      <SignIn />
      <SignUp />
      <AuthDetail />
    </div>
  );
}

export default App;

์ตœ์ƒ๋‹จ App ํŒŒ์ผ์—์„œ๋Š” SignIn, SignUp, AuthDetail ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•˜๊ณ  ์žˆ๋‹ค. ํฅ๋ฏธ์ง„์ง„ํ•˜๊ตฌ๋งŒ!

src/components/auth/SignIn.js ๐ŸŸก

import { signInWithEmailAndPassword } from "firebase/auth";
import React, { useState } from "react";
import { auth } from "../../firebase";

const SignIn = () => {
  const [email, setEmail] = useState("");
  const [password, setPassword] = useState("");

  const signIn = (e) => {
    e.preventDefault();
    signInWithEmailAndPassword(auth, email, password)
      .then((userCredential) => {
        console.log(userCredential);
      })
      .catch((error) => {
        console.log(error);
      });
  };
  return (
    <div>
      <form onSubmit={signIn}>
        <h1>Log In to your Account</h1>
        <input
          type="email"
          placeholder="Enter your email"
          value={email}
          onChange={(e) => setEmail(e.target.value)}
        ></input>
        <input
          type="password"
          placeholder="Enter your password"
          value={password}
          onChange={(e) => setPassword(e.target.value)}
        ></input>
        <button>LogIn</button>
      </form>
    </div>
  );
};

export default SignIn;

SignIn ์ปดํฌ๋„ŒํŠธ๋Š” ์šฐ์„  'Log In to your Account'๋ผ๋Š” ์ œ๋ชฉ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๊ทธ ๋‹ค์Œ ๋‘ ๊ฐœ์˜ input ํ•„๋“œ์™€ ํ•œ ๊ฐœ์˜ ๋ฒ„ํŠผ์„ ๋ณด์—ฌ์ค€๋‹ค. return ๋ถ€๋ถ„์€ ๋”ฑํžˆ ์–ด๋ ค์šด ์ ์ด ์—†๋‹ค. ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋Š” ์ˆœ๊ฐ„ form ํƒœ๊ทธ์—์„œ ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ signIn ํ•จ์ˆ˜์— event ๊ฐ์ฒด๋กœ ์ „๋‹ฌ๋œ๋‹ค. ์ง„์งœ๋กœ? ใ…‡ใ…‡ console ์ฐ์–ด๋ด„!

signIn ํ•จ์ˆ˜๋Š” ์ž…๋ ฅ๋ฐ›์€ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ ๊ฐ€์žฅ ๋จผ์ € preventDefault ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. form ์ œ์ถœ ์‹œ ํŽ˜์ด์ง€ ์ƒˆ๋กœ๊ณ ์นจ์„ ๋ฐฉ์ง€ํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

signInWithEmailAndPassword๋Š” firebase์—์„œ ์ œ๊ณตํ•˜๋Š” ํ•จ์ˆ˜ ์ค‘ ํ•˜๋‚˜๋‹ค. ์ด ํ•จ์ˆ˜๋Š” auth๋ผ๋Š” firebase์˜ ์ธ์ฆ ๊ฐ์ฒด์™€ email, password๋ฅผ ๋ฐ›์•„์„œ ๋กœ๊ทธ์ธ์„ ์‹œ๋„ํ•˜๋Š” ํ•จ์ˆ˜์ธ๊ฐ€ ๋ณด๋‹ค. ๋‚˜๋Š” ๋งํ•˜๋Š” ๊ฐ์ž๋‹ˆ๊นŒ ์ผ๋‹จ ์ด ์ •๋„๋งŒ ์ดํ•ดํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ฒ ๋‹ค.

then์€ ๋กœ๊ทธ์ธ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ด์ฃผ์–ด์กŒ์„ ๋•Œ, 'userCredential' ๊ฐ์ฒด๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„์„œ ์‹คํ–‰๋˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜์ด๋‹ค. 'userCredential' ๊ฐ์ฒด์—๋Š” ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

catch๋Š” ์—๋Ÿฌ๊ฐ€ ๊ฐ์ง€๋˜๋ฉด ์ฝ˜์†”๋กœ ํ•ด๋‹น ์—๋Ÿฌ๋ฅผ returnํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค.

์š”์•ฝ ๐ŸŸข

  1. ์ œ๋ชฉ, input, button ๋ฆฌํ„ด
  2. ๋ฒ„ํŠผ ํด๋ฆญํ•˜๋ฉด onSubmit์— ์˜ํ•ด form์—์„œ ๋ฐœ์ƒํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ event ๊ฐ์ฒด๋กœ signIn ํ•จ์ˆ˜๋กœ ์ „๋‹ฌ๋จ
  3. signIn ํ•จ์ˆ˜์—์„œ๋Š” ์ƒˆ๋กœ๊ณ ์นจ์„ ๋ฐฉ์ง€ํ•˜๊ณ  signInWithEmailAndPassword ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ์ธ์„ ์‹œ๋„ํ•จ
  4. ์„ฑ๊ณตํ•˜๋ฉด userCredential์ด๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„์„œ console์— returnํ•˜๊ณ , ์‹คํŒจํ•˜๋ฉด error๋ฅผ returnํ•จ

ํšŒ๊ณ  ๐Ÿ”ต

๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์€ ๋‚ด์ผ ์ •๋ฆฌํ•˜๊ณ , ์‹œ๊ฐ„์ด ํ—ˆ๋ฝํ•˜๋ฉด crud์— ๊ด€ํ•œ ์ž๋ฃŒ๋ฅผ ํ•™์Šตํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค.

์ด๋ฒˆ์— ์ž˜ํ•˜๋ƒ ๋ชป ํ•˜๋ƒ ํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋ ‡๊ฒŒ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ๊ธฐํšŒ๊ฐ€ ์ˆ˜๋ฐฑ, ์ˆ˜์ฒœ ๋ฒˆ ๋” ์žˆ๋‹ค๋ฉด ๋ง์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ ๋” ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ง€๊ธˆ ์ž˜ํ•˜๋ƒ๊ฐ€ ์•„๋‹ˆ๋ผ ์ง€๊ธˆ ์ž๋ผ๋ƒ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ ๋ฐ”๊นฅ์„ธ์ƒ์—์„œ๋Š” ํ•œ ๋ฒˆ์˜ ํŒ๊ฐ€๋ฆ„์œผ๋กœ ๋‚˜์˜ ๋ฏธ๋ž˜๊ฐ€, ์šฐ๋ฆฌ์˜ ๋ฏธ๋ž˜๊ฐ€ ๊ฐˆ๋ฆฌ๋Š” ๊ฒฝ์šฐ๋ณด๋‹ค๋Š” ์ˆ˜๋ฐฑ, ์ˆ˜์ฒœ ๋ฒˆ์˜ ๋ˆ„์  ์œ„์— ์„œ์„œํžˆ ์ •ํ•ด์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋” ๋งŽ์Šต๋‹ˆ๋‹ค.

-ํ•จ๊ป˜ ์ž๋ผ๊ธฐ: ์• ์ž์ผ๋กœ ๊ฐ€๋Š” ๊ธธ ไธญ

profile
Write a little every day, without hope, without despair โœ๏ธ

0๊ฐœ์˜ ๋Œ“๊ธ€