Capstone#1. Firebase Authentication ์‚ฌ์šฉํ•ด์„œ ๋‚˜๋งŒ์˜ ์–ดํ”Œ ๋งŒ๋“ค๊ธฐ

2024. 11. 8. 06:24ใ†Study_Develop

๋ฐ˜์‘ํ˜•

 

์•ˆ๋…•ํ•˜์„ธ์š”!

์ €๋Š” ์š”์ฆ˜ ์กธ์—…์„ ์œ„ํ•ด.. ์กธ์—…์ž‘ํ’ˆ์„ ์ œ์ž‘ํ•˜๊ณ  ์žˆ๋Š”๋ฐ์š”!

์„œ๋ฒ„๊ตฌํ˜„์œผ๋กœ firebase๋ฅผ ์„ ํƒํ•ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค!

 

์ฒ˜์Œ์— Firebase๋ฅผ ์„ ํƒํ•œ ์ด์œ ๋Š” 

์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ธฐ๋Šฅ, ์†์‰ฌ์šด ํ†ตํ•ฉ, ๊ฐ„ํŽธํ•œ ์‚ฌ์šฉ์ž ์ธ์ฆ ๋“ฑ 

๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ Firebase์—์„œ ์ž์ฒด ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค!

๋˜ํ•œ ํ‘ธ์‹œ ์•Œ๋ฆผ, ์˜คํ”„๋ผ์ธ ๊ธฐ๋Šฅ ๋ฐ ๊ธฐํƒ€ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋ฏ€๋กœ 

๋ณต์žก์„ฑ์„ ์ตœ์†Œํ™”ํ•˜๋ฉด์„œ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์ ์€ ์‹œ๊ฐ„์„ ๋“ค์ผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„

์„ ํƒํ•˜๊ฒŒ ๋˜์—ˆ์–ด์š”!

 

์šฐ์„  ์–ด๋–ค ๋‚ด์šฉ๋จผ์ € ๋‹ค๋ฃจ์–ด ๋ณผ๊นŒ ํ•˜๋‹ค๊ฐ€ 

์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ถ€๋ถ„์ด ์šฐ์„ ์ธ ๊ฒƒ ๊ฐ™์•„์„œ

 

Firebase auth๋กœ ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž… ๊ตฌํ˜„ ๋ถ€๋ถ„์„ ๋จผ์ € ์†Œ๊ฐœํ•ด ๋“œ๋ฆด๊ฒŒ์š”!

 

 

 

firebase auth

 

 

firebase auth์—์„œ๋Š” ์ž์ฒด์ ์œผ๋กœ ํšŒ์›๊ฐ€์ž… ๋ฐ ๋กœ๊ทธ์ธ, ๋กœ๊ทธ์•„์›ƒ, ์‚ฌ์šฉ์ž ์ •๋ณด ์ˆ˜์ • ๋“ฑ์„ ์œ„ํ•œ 

๋‹ค์–‘ํ•œ ์ธ์ฆ ๊ด€๋ จ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์–ด์š”!

 

์šฐ์„ , firebase/auth์— ํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ import ํ•ด์•ผ๊ฒ ์ฃ ?

 

https://www.npmjs.com/package/@firebase/auth

 

์š”๋ ‡๊ฒŒ ์„ค์น˜ํ•ด ์ฃผ์‹œ๊ณ 

 

import { getAuth } from 'firebase/auth';

 

์ด๋ ‡๊ฒŒ import ํ•ด์ฃผ์„ธ์š”!

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ˜„์žฌ ์ ‘์†ํ•œ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•ด์š”!

 

๋ฌผ๋ก  ๋กœ๊ทธ์ธ์„ ํ•œ ๋’ค์— ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๊ฒ ์ฃ ?

 

const auth = getAuth();
const user = auth.currentUser;

console.log(user.photoURL);  // ํ”„๋กœํ•„ ์‚ฌ์ง„ URL
console.log(user.phoneNumber);  // ํœด๋Œ€ํฐ ๋ฒˆํ˜ธ
console.log(user.metadata);  // ์‚ฌ์šฉ์ž ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(createdAt, creationTime, lastLoginAt, lastSignInTime)
console.log(user.email);  // ์ด๋ฉ”์ผ
console.log(user.displayName);  // ํ‘œ์‹œ ์ด๋ฆ„
console.log(user.emailVerified);  // ์ด๋ฉ”์ผ ์ธ์ฆ ์—ฌ๋ถ€(boolean)
console.log(user.isAnonymous);  // ์ต๋ช… ์—ฌ๋ถ€(boolean)

 

 

์ด๋Ÿฐ ์‹์œผ๋กœ ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž์˜ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํ•„ ์š”์†Œ์ž…๋‹ˆ๋‹ค!

 

ํ˜น์€ ๋กœ๊ทธ์ธ oauth google facebook ๋“ฑ์œผ๋กœ๋ถ€ํ„ฐ ํ”„๋กœํ•„ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ํ•ด์š”!

 

์‹ ๊ทœ ์‚ฌ์šฉ์ž ๊ฐ€์ž…

 

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

const auth = getAuth();
createUserWithEmailAndPassword(auth, email, password)
  .then((userCredential) => {
    // Signed up 
    const user = userCredential.user;
    // ...
  })
  .catch((error) => {
    const errorCode = error.code;
    const errorMessage = error.message;
    // ..
  });

 

 

์ด๋Ÿฐ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์–‘์‹์„ ์ž‘์„ฑํ•˜๋ฉด

์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์ด๋ฉ”์ผ ์ฃผ์†Œ์™€ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•œ ํ›„ 

createUserWithEmailAndPassword์— ์ „๋‹ฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 

๊ธฐ์กด ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ

 

 

signInWithEmailAndPassword

 

์š”๊ฑธ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š”๋ฐ์š”!

 

      await firebase.auth().signInWithEmailAndPassword(email, password);

 

์ €๋„ ์ œ ํ”„๋กœ์ ํŠธ ๋‚ด์— ์š”๋Ÿฐ ์‹์œผ๋กœ ์‚ฌ์šฉํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค!

 

 

์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ์—…๋ฐ์ดํŠธ

 

updateProfile

 

import { getAuth, updateProfile } from "firebase/auth";
const auth = getAuth();
updateProfile(auth.currentUser, {
  displayName: "Jane Q. User", photoURL: "https://example.com/jane-q-user/profile.jpg"
}).then(() => {
  // Profile updated!
  // ...
}).catch((error) => {
  // An error occurred
  // ...
});

 

๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ

 

updatePassword

 

 

ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

 

import { getAuth, updatePassword } from "firebase/auth";

const auth = getAuth();

const user = auth.currentUser;
const newPassword = getASecureRandomPassword();

updatePassword(user, newPassword).then(() => {
  // Update successful.
}).catch((error) => {
  // An error ocurred
  // ...
});

 

 

 

์‚ฌ์‹ค ํ•ด๋‹น ๋‚ด์šฉ๋“ค์€

 

https://firebase.google.com/docs/auth?hl=ko

 

Firebase Authentication

Firebase ์ธ์ฆ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ ๋ช‡ ์ค„๋งŒ์œผ๋กœ ์†์‰ฌ์šด ์‚ฌ์šฉ์ž ์ธ์ฆ, ๋กœ๊ทธ์ธ, ์˜จ๋ณด๋”ฉ์„ ์œ„ํ•œ ์—”๋“œ ํˆฌ ์—”๋“œ ID ์†”๋ฃจ์…˜์„ ์•ฑ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

firebase.google.com

 

ํ•ด๋‹น ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค!

 

์ œ๊ฐ€ ์œ„์— ์†Œ๊ฐœํ•ด๋“œ๋ฆฐ ๊ฒƒ ๋ง๊ณ ๋„...

์ •๋ง ์ข‹์€ ๊ธฐ๋Šฅ๋“ค์ด ๋งŽ๋”๋ผ๊ณ ์š”....

 

์ œ๊ฐ€ ํ•ด๋‹น ๋‚ด์šฉ์„ ๋‹ค ๋‹ด๋Š” ๊ฒƒ๋ณด๋‹ค ์ด๋Ÿฐ ๋ฉ”์„œ๋“œ ๋“ฑ์„ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ˆ!

๊ผผ๊ผผํ•˜๊ฒŒ ์ฝ์–ด๋ด๋ผ.. 

์ด๋Ÿฐ ์ทจ์ง€์˜ ๊ธ€์ž…๋‹ˆ๋‹คใ…...ใ…Žใ…Žใ…Ž

 

๊ผญ๊ผญ ์ฝ์–ด๋ณด์‹œ๊ณ 

ํ•„์š”ํ•œ ๊ธฐ๋Šฅ ์™์™ ๋ฝ‘์•„ ๋‚ด ํ”„๋กœ์ ํŠธ์— ๋„ฃ๋Š”

ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฉ์‹œ๋‹ค!!

 

 

 

 

 

 

๋‹ค ์˜คํ”ˆํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ..

๋Œ€์ถฉ ํšŒ์›๊ฐ€์ž… ๋ฐ ์‹œ์ž‘ ํ™”๋ฉด ๋ณด์—ฌ๋“œ๋ฆด๊ฒŒ์š” ใ…Žใ…Ž

 

์ €ํฌ๋Š” firebase์˜ ๋‚ด์žฅ ๋ฉ”์„œ๋“œ ๋“ฑ์„ ์‚ฌ์šฉํ•œ ๊ฒƒ๋„ ์žˆ๊ณ 

๋”ฐ๋กœ api ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•œ ๊ฒƒ๋“ค๋„ ์žˆ์–ด์š”!

 

 

๋‹ค์Œ ๊ธ€์—์„  ํ”„๋ก ํŠธ์—”๋“œ๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜์˜€๋Š”์ง€, 

firebase realtime DB ๋“ฑ๋“ฑ ๋‹ค์–‘ํ•œ ์ •๋ณด์— ๋Œ€ํ•ด์„œ ๊ฐ€์ ธ์˜ฌ๊ฒŒ์š”~~

 

 

 

 

Firebase๋ฅผ ์ž ๊น ์‚ฌ์šฉํ•ด ๋ณด๊ณ  ๋А๋‚€ ์ ์€

๊ธฐ์กด์˜ crud ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด POST, GET๋“ฑ๊ณผ ๊ฐ™์€

์—”๋“œํฌ์ธํŠธ๋ฅผ ์ •์˜ํ•˜๊ณ  ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋ฉฐ, 

์ด๋กœ ์ธํ•ด ์„œ๋ฒ„ ์ธก ๊ตฌํ˜„๋„ ํ”„๋ก ํŠธ ๋‹จ ๊ตฌํ˜„๋„ ๋˜๊ฒŒ ๋˜๊ฒŒ ๋ณต์žกํ•ด์ง€์ž–์•„์š”!

 

๊ทธ๋Ÿฐ๋ฐ firebase์—์„œ ์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ์‹œ๋‹ˆ ์ •๋ง ๊ฐ์‚ฌํ•˜๋ฉด์„œ๋„..

๋‚˜๋Š” ์•ž์œผ๋กœ ์ด ์ง„ํ™”ํ•˜๋Š” ๊ฐœ๋ฐœ ์‹œ์žฅ์—์„œ ์–ด๋–ป๊ฒŒ ์‚ด์•„๋‚จ์•„์•ผ ํ•˜๋‚˜...

๊ทธ๋Ÿฐ ์ƒ๊ฐ๋„ ๋“œ๋„ค์š”...

 

๋ญ.. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์—ด์‹ฌํžˆ ํ•˜๋Š” ์ž๋งŒ์ด ์‚ด์•„๋‚จ๊ฒ ์ฃ ?

ใ… ใ… 

๊ทธ๋Ÿผ ์•ˆ๋…•!