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ํ๋ ์ญํ ์ ์ํํ๊ณ ์๋ค.
์์ฝ ๐ข
ํ๊ณ ๐ต
๋๋จธ์ง ๋ถ๋ถ์ ๋ด์ผ ์ ๋ฆฌํ๊ณ , ์๊ฐ์ด ํ๋ฝํ๋ฉด crud์ ๊ดํ ์๋ฃ๋ฅผ ํ์ตํ๋๋ก ํ๊ฒ ๋ค.
์ด๋ฒ์ ์ํ๋ ๋ชป ํ๋ ํ๋ ๊ฒ์ ๊ทธ๋ ๊ฒ ์ค์ํ์ง ์์ต๋๋ค. ์์ผ๋ก ๊ธฐํ๊ฐ ์๋ฐฑ, ์์ฒ ๋ฒ ๋ ์๋ค๋ฉด ๋ง์ ๋๋ค. ๊ทธ๋ฐ ๊ฒฝ์ฐ ๋ ์ค์ํ ๊ฒ์ ์ง๊ธ ์ํ๋๊ฐ ์๋๋ผ ์ง๊ธ ์๋ผ๋๋ ๊ฒ์ ๋๋ค. ์ค์ ๋ฐ๊นฅ์ธ์์์๋ ํ ๋ฒ์ ํ๊ฐ๋ฆ์ผ๋ก ๋์ ๋ฏธ๋๊ฐ, ์ฐ๋ฆฌ์ ๋ฏธ๋๊ฐ ๊ฐ๋ฆฌ๋ ๊ฒฝ์ฐ๋ณด๋ค๋ ์๋ฐฑ, ์์ฒ ๋ฒ์ ๋์ ์์ ์์ํ ์ ํด์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ ๋ง์ต๋๋ค.
-ํจ๊ป ์๋ผ๊ธฐ: ์ ์์ผ๋ก ๊ฐ๋ ๊ธธ ไธญ