์๊ณ ๋ฆฌ์ฆ ํ์ด1
์๊ณ ๋ฆฌ์ฆ ํ์ด2
// firebase.js
import { initializeApp } from "firebase/app";
import { getAuth } from "firebase/auth";
const firebaseConfig = { // firebase์์ ์ดํ๋ฆฌ์ผ์ด์
๋ง๋ค๋ฉด ์ฃผ๋ ์
apiKey: "AIzaSyDdvEFtM7gjWi2MP0UmMWlhoVc1y2uUVpo",
authDomain: "fir-practice-daf73.firebaseapp.com",
projectId: "fir-practice-daf73",
storageBucket: "fir-practice-daf73.appspot.com",
messagingSenderId: "518889919904",
appId: "1:518889919904:web:e6ea172519e8d1a33a40c5",
};
const app = initializeApp(firebaseConfig); // ๋ด ์ดํ๋ฆฌ์ผ์ด์
์ ๋ณด๋ฅผ ์ด์ฉํด์ firebase๋ฅผ ์ฌ์ฉํ ๊ฑฐ์
export const auth = getAuth(app); // ๋ด ์ดํ๋ฆฌ์ผ์ด์
์์ ๊ณ์ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ง ๋ฝ์์ฃผ๋๋ฏ
import { useState } from "react";
function App() {
const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
return (
<>
<input
type="email"
value={email}
onChange={(e) => {
setEmail(e.target.value);
}}
/>
<input
type="password"
value={password}
onChange={(e) => {
setPassword(e.target.value);
}}
/>
<button>
ํ์๊ฐ์
</button>
<button>
๋ก๊ทธ์ธ
</button>
<button>
๋ก๊ทธ์์
</button>
</>
)
}
export default App;
import { auth } from "./firebase";
import {
createUserWithEmailAndPassword,
} from "firebase/auth";
(์๋ต)
<button
onClick={async () => {
try {
const userCredential = await createUserWithEmailAndPassword(
auth,
email,
password
);
console.log(userCredential);
} catch (error) {
console.error(error);
}
}}
>
ํ์๊ฐ์
</button>
import {
createUserWithEmailAndPassword,
signInWithEmailAndPassword,
} from "firebase/auth";
(์๋ต)
<button
onClick={async (event) => {
try {
const userCredential = await signInWithEmailAndPassword(
auth,
email,
password
);
console.log(userCredential);
} catch (error) {
console.error(error);
}
}}
>
๋ก๊ทธ์ธ
</button>
import {
createUserWithEmailAndPassword,
signInWithEmailAndPassword,
signOut,
} from "firebase/auth";
(์๋ต)
<button
onClick={async () => {
alert("๋ก๊ทธ์์ ํ ๊น?");
await signOut(auth);
}}
>
๋ก๊ทธ์์
</button>
const [currentUser, setCurrentUser] = useState(null);
// ํ์ํ ๊ณณ์ ์์ฑ
setCurrentUser(userCredential.user.email);
setCurrentUser(null);
{
currentUser
? currentUser๋ณด์ฌ์ฃผ๊ณ , ๋ก๊ทธ์์ ๋ฒํผ ๋ณด์ฌ์ฃผ๊ธฐ
: input์ฐฝ๊ณผ ํ์๊ฐ์
, ๋ก๊ทธ์ธ ๋ฒํผ ๋ณด์ฌ์ฃผ๊ธฐ
}
setCurrentUser
๋ฅผ ๋ฃ๊ณ ์์onAuthStateChanged
๋ผ๋ ๊ธฐ๋ฅ์ ํ์ฉํ๋ฉด ํ ๋ฒ์ ๊ด๋ฆฌ ๊ฐ๋ฅonAuthStateChanged
๋ ๋ก๊ทธ์ธ์ ํ์ ๋, ๋ก๊ทธ์์ ํ์ ๋๋ฅผ ์์์ฐจ๋ฆฌ๋ ์ญํ (์ต์ ๋ฒ)์ ํจcurrentUser
๊ฐ null
ํน์ undefined
email
์ ๋ฃ๊ธฐimport {
createUserWithEmailAndPassword,
signInWithEmailAndPassword,
onAuthStateChanged,
signOut,
} from "firebase/auth";
(์๋ต)
useEffect(() => {
onAuthStateChanged(auth, (user) => {
setCurrentUser(user?.email);
});
}, []);
์ด์ฐ์ ์ฐ ํ์ด์ด๋ฒ ์ด์ค ์ฐ๋์ ๋๋ด๊ณ ๋ ํ ํ์๊ฐ์
์ ํ๋ ค๋๋ฐ ํ์ด์ด๋ฒ ์ด์ค๋ก ๋ฐ์ดํฐ๊ฐ ๋์ด๊ฐ์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๋ด๊ฐ ๋ก์ง์ ์ ๋ชป ์ง ๋ถ๋ถ์ ์๋์ง ์คํ๋ ์๋์ง ์ถฉ๋ถํ ํ์ธ์ ํด๋ณธ ํ ๊ฐ์ ํ์๋ถ๊ป ์ง๋ฌธ์ ํด๋ดค๋ค..
๊ฐ์ด ์ฝ์๋ ์ฐ์ด๋ณด๊ณ ๊ฒ์ฌ์ฐฝ๋ ๋ฏ์ด๋ณด๋ ๋ฐ์ดํฐ๋ ์ ์ก์ด ๋๋๋ฐ ์ค๊ฐ์ ์๋ก๊ณ ์นจ์ด ์ผ์ด๋์ ์๋ฒ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ง ๋ชปํ๋ ์ํฉ์ด์๋ค. ๋๋์ฒด ์..!
์๊ณ ๋ณด๋ ๋๋ ์
๋ ฅ์ฐฝ์ form
ํ๊ทธ๋ฅผ ์ผ๊ณ form
ํ๊ทธ์์๋ ๋ฆฌ์
์ด ๋๊ธฐ ๋๋ฌธ์ ๊ทธ๊ฑธ ๋ง์์ฃผ๋ ๋ก์ง์ด ํ์ํ๋ค๊ณ ํ๋ค.
e.preventDefault();
๋๊ฐ์ง์ ๊ฐ์ ์๋ฃ๋ฅผ ๋ณด๋ฉด์ ํด์ ๊ทธ๋ฐ์ง ์ ๋ถ๋ถ์ ๋นผ๋จน์๋ค.. ๋ค์ ๋ฃ์ด์ฃผ๋ ์ ์์ ์ผ๋ก ์๋ํจ!
a ํ๊ทธ๋ submit ํ๊ทธ๋ ๋๋ฅด๊ฒ ๋๋ฉด href๋ฅผ ํตํด ์ด๋ํ๊ฑฐ๋ ์ฐฝ์ด ์๋ก๊ณ ์นจํ์ฌ ์คํ๋๋ค. preventDefault ๋ฅผ ํตํด ์ด๋ฌํ ๋์์ ๋ง์์ค ์ ์๋ค๊ณ ํ๋ค.
์ฃผ๋ก ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๋
1. a ํ๊ทธ๋ฅผ ๋๋ ์ ๋๋ href ๋งํฌ๋ก ์ด๋ํ์ง ์๊ฒ ํ ๊ฒฝ์ฐ
2. form ์์ submit ์ญํ ์ ํ๋ ๋ฒํผ์ ๋๋ ์ด๋ ์๋ก ์คํํ์ง ์๊ฒ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ (submit์ ์๋๋จ)
2์ ์์๋ก๋ ์ค๋์ ๋์ ๊ฒฝ์ฐ..!
๋ฐ๋ event ์ ๋ํด preventDefault ๋ฅผ ํด์ฃผ์ง ์์๊ธฐ ๋๋ฌธ์ submit ๋จ๊ณผ ๋์์ ์ฐฝ์ด ๋ค์ ์คํ๋๊ธฐ ๋๋ฌธ์ ๋ค์ ์ด๊ธฐ ํ๋ฉด์ผ๋ก ๋์์ค๊ฒ ๋๋ค.
๋ด๋ฐฐ์บ ๋ค์ด์ค๊ณ ๋์ ์ค๋ ์ ์ผ ์ด์ฌํ ํ ๊ฑฐ ๊ฐ๋ค.. ํ์๋ถ๋ค์ด ๋ฐฐ๋ คํด์ฃผ์ ๋์ ์ฌ์ค์ ์ด๋ฒ์๋ ์ ์ผ ์ฌ์ด ๊ธฐ์ ์ ๋งก๊ฒ ๋ ๊ฑฐ ๊ฐ์ง๋ง ๊ธฐ์กด์ ๋ชฐ๋๋ ์์ ํ ์๋ก์ด ๊ธฐ๋ฅ์ ์งง์ ์๊ฐ๋ด์ ๊ตฌํ์ ํ๋ค๋ ๊ฑฐ ์์ฒด๊ฐ ๋๋ฌด ๋ง๋งํ๊ณ ๋ฌด์์ ์ง๋ง ํฐ ์ฐ ํ๋๋ ๋์ ๊ฑฐ ๊ฐ๋ค. ๊ทผ๋ฐ ์๊ทผํ css๊ฐ ์ ์ผ ์ด๋ ค์ด ๊ฑฐ ๊ฐ์.......... ์ผ๋ฅธ ๊ธฐ๋ณธ์ ์ธ ๋ผ๋ ๋ง๋ค๊ณ ๋ช๊ฐ์ง ๋ ๊ธฐ์ ์ ๋ง๋ถ์ฌ์ผ๊ฒ ๋ค. ๊ทธ๋ฆฌ๊ณ ์ค๋ ๋ด๋ฐฐ์บ ์ ๋ค์ด์ค๊ณ ์ฒ์์ผ๋ก ๋ค๋ฅธ ๋ถ์ ์ฝ๋์์ ์ค๋ฅ๋ฅผ ์ก์์คฌ๋ค..! ๋๊ตฐ๊ฐ์๊ฒ ๋์์ ์ฃผ๋ ์๊ฐ์ด ์ฌ ๊ฑฐ๋ผ๊ณค ์๊ฐ๋ ๋ชปํ๋๋ฐ ๋ด๊ฐ ์กฐ๊ธ์ ์ฑ์ฅํ๊ตฌ๋ ์ถ์๋ค. ์๋ฌ ๋ฉ์์ง๋ฅผ ๋ณด๋ฉด์ ์ค๋ฅ๋ฅผ ํด๊ฒฐํ๋ ๊ธฐ์จ์ ๋ง๋ณด๋ ์ฝ๋ฉ์ด๋ ์กฐ๊ธ์ ์นํด์ง ๊ฑฐ ๊ฐ๋คใ ๋ ์ด์ ๋ ํ์ด์ด๋ฒ ์ด์ค ์กฐ๊ธ ์๋ค!!!
ํ์ด์ด๋ฒ ์ด์ค ์ดํดํ๊ธฐ ๋๋ฌด ์ด๋ ค์ ๋๋ฐ ๊ฐ์ฌํฉ๋๋ค ใ