[TIL/React] 2023/08/02
Authentication in ReactJS Using Firebase ๐ ํ๋ก์ ํธ์ ์งํ์ ์ํด, ๋ก๊ทธ์ธ๊ณผ ํ์๊ฐ์ ๊ธฐ๋ฅ(Authentication)์ ๋ํ ํ์ต์ ํ์๋ถ๊ฐ๊ฒฐํ๋ค. ์ธ๊ตญ์ธ ํ๋ก๊ทธ๋๋จธ ๋๋์ ์๋ฃ๋ฅผ ์ฐธ๊ณ ํ๋ค. reference: https://w
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์ ๊ดํ ์๋ฃ๋ฅผ ํ์ตํ๋๋ก ํ๊ฒ ๋ค.
์ด๋ฒ์ ์ํ๋ ๋ชป ํ๋ ํ๋ ๊ฒ์ ๊ทธ๋ ๊ฒ ์ค์ํ์ง ์์ต๋๋ค. ์์ผ๋ก ๊ธฐํ๊ฐ ์๋ฐฑ, ์์ฒ ๋ฒ ๋ ์๋ค๋ฉด ๋ง์ ๋๋ค. ๊ทธ๋ฐ ๊ฒฝ์ฐ ๋ ์ค์ํ ๊ฒ์ ์ง๊ธ ์ํ๋๊ฐ ์๋๋ผ ์ง๊ธ ์๋ผ๋๋ ๊ฒ์ ๋๋ค. ์ค์ ๋ฐ๊นฅ์ธ์์์๋ ํ ๋ฒ์ ํ๊ฐ๋ฆ์ผ๋ก ๋์ ๋ฏธ๋๊ฐ, ์ฐ๋ฆฌ์ ๋ฏธ๋๊ฐ ๊ฐ๋ฆฌ๋ ๊ฒฝ์ฐ๋ณด๋ค๋ ์๋ฐฑ, ์์ฒ ๋ฒ์ ๋์ ์์ ์์ํ ์ ํด์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ ๋ง์ต๋๋ค.
-ํจ๊ป ์๋ผ๊ธฐ: ์ ์์ผ๋ก ๊ฐ๋ ๊ธธ ไธญ
More to read
AI&ML ๊ธฐ์ด
Reference: https://bettermesol.github.io/ml/2019/09/16/ai-ml-dl/AI: ๊ธฐ๊ณ๊ฐ ์ฌ๋์ฒ๋ผ ์๊ฐํ๊ณ ํ๋จํ๊ฒ ๋ง๋๋ ๊ฐ์ฅ ๋์ ๋ฒ์ฃผ์ ๊ธฐ์ ์ ๋๋ค.ML: ๋ฐ์ดํฐ๋ฅผ ํ์ตํ์ฌ ์ค์ค๋ก ๊ท์น์ ์ฐพ์๋ด๋ AI์ ํ ๋ถ์ผ๋ก,
'AI Agent Economy'Novitas : AI Agent๊ฐ ์ง๊ฐ์ ๊ฐ์ง๋ ์ธ์
์ผ๋ง ์ , ๋ฏธ๋์์ ์ฆ๊ถ ๋ฆฌ์์น ๋ฆฌํฌํธ(์ฌํด๋ ์ด๋๋ฆฌ์์ด๋ค: ์์ด์ ํธ ์๋์ Near Automata)๋ฅผ ์ ํ๊ฒ ๋์์ต๋๋ค. AI Agent๋ฅผ ์ธ๊ฐ๊ณผ ํจ๊ปํ ๊ฒฝ์ ์ฃผ์ฒด๋ก ๋ฐ๋ผ๋ณด๋ ์๊ฐ์ ์ ์์ด ์ถฉ๊ฒฉ์ ๋ฐ์๋๋ฌ์ฃ .ํ ๊ฐ์ง ์ง๊ณ ๋์ด๊ฐ ๋ถ๋ถ์ด ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ํํ 'AI'
'ERC-8004'Novitas: AI ์์ด์ ํธ ๊ฒฝ์ ์ฃผ์ฒด
Web 4.0์ ํ ๋ฌธ์ฅ์ผ๋ก ์ ์ํ๋ฉด Sovereign Transact์ ๋๋ค.AI๊ฐ ์ธ๊ฐ์ ํ๋ฝ ์์ด ์ง๊ฐ์ ์์ ํ๊ณ , ๊ฒฐ์ ๋ฅผ ์ํํ๋ฉฐ, ์ธํ๋ผ๋ฅผ ํต์ ํ๋ ์ฃผ๊ถ์ ๊ฒฝ์ ์ฃผ์ฒด๊ฐ ๋๋ ์ธ๊ณ์ ๋๋ค. Web 3.0์ด ๋ธ๋ก์ฒด์ธ ๊ธฐ๋ฐ์ ํ์ค์ํ๋ฅผ ์คํํ๋ค๋ฉด, Web 4.0์ ๊ทธ