https://firebase.google.com/docs/auth/web/password-auth?hl=ko#create_a_password-based_account
์๋ฐ์คํฌ๋ฆฝํธ์์ ๋น๋ฐ๋ฒํธ ๊ธฐ๋ฐ ๊ณ์ ์ ์ฌ์ฉํด Firebase๋ก ์ธ์ฆํ๊ธฐ
Google์ ํ์ธ ๊ณต๋์ฒด๋ฅผ ์ํ ์ธ์ข ์ ํ๋ฑ์ ์ถ๊ตฌํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. ์์ธํ ์์๋ณด๊ธฐ ์๊ฒฌ ๋ณด๋ด๊ธฐ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋น๋ฐ๋ฒํธ ๊ธฐ๋ฐ ๊ณ์ ์ ์ฌ์ฉํด Firebase๋ก ์ธ์ฆํ๊ธฐ ์ปฌ๋ ์ ์ ์ฌ์ฉํด
firebase.google.com
firebase์์ ์ ๊ณตํด์ฃผ๋ API๋ฅผ ์ด์ฉํด์, ์ด๋ฉ์ผ๊ณผ ๋น๋ฐ๋ฒํธ๋ก ํ์๊ฐ์ ํ๊ธฐ๋ฅผ ๊ตฌํํด๋ณด๊ฒ ์ต๋๋ค!
00. ์ ๊ท ์ฌ์ฉ์ ์์ฑ ๋ฐฉ๋ฒ
Firebase ํ๋ก์ ํธ์์ ์ ๊ท ์ฌ์ฉ์๋ฅผ ์์ฑํ ๋๋ ์๋์ ๊ฐ์ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
- createUserWithEmailAndPassword ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ
- Google ๋ก๊ทธ์ธ ๋๋ Facebook ๋ก๊ทธ์ธ๊ณผ ๊ฐ์ ์ ํด ID ๊ณต๊ธ์ ์ฒด๋ฅผ ์ด์ฉํด ์ฌ์ฉ์์ ์ต์ด ๋ก๊ทธ์ธ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ
๋งจ ์ฒ์์ ์๋์ ๊ฐ์ด ์ฌ์ฉ์๊ฐ ์๋ฌด๋ ์๋ค๊ฐ, ์ด๋ฉ์ผ๊ณผ ๋น๋ฐ๋ฒํธ ํน์ ์ ํด ID ๊ณต๊ธ์ ์ฒด ์ต์ด ๋ก๊ทธ์ธ์ ํตํด ์ ๊ท ์ฌ์ฉ์๊ฐ ์์ฑ๋์ด ์ถ๊ฐ๋๋ฉด ํ์๊ฐ์ ์ด ์๋ฃ๋ ๊ฒ์ด์ฃ !
1. createUserWithEmailAndPassword ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ (์ด๋ฒ ๋ธ๋ก๊ทธ์์ ๋ค๋ฃฐ ์ฃผ์ ์ ๋๋ค.)
- ์ด๋ฉ์ผ๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ท ์ฌ์ฉ์๋ก ์ถ๊ฐ๋ฉ๋๋ค. ๐
2. Google ๋ก๊ทธ์ธ ๋๋ Facebook ๋ก๊ทธ์ธ๊ณผ ๊ฐ์ ์ ํด ID ๊ณต๊ธ์ ์ฒด๋ฅผ ์ด์ฉํด ์ฌ์ฉ์์ ์ต์ด ๋ก๊ทธ์ธ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ
- ๋ณธ์ธ์ ํ๋ก์ ํธ์ ์ ํด ID ๊ณต๊ธ์ ์ฒด ๊ณ์ ์ผ๋ก ์ต์ด๋ก ๋ก๊ทธ์ธํจ์ผ๋ก์จ ์ ๊ท ์ฌ์ฉ์๋ก ์ถ๊ฐ๋ฉ๋๋ค. โ๏ธ
01. ์ด๋ฉ์ผ๊ณผ ๋น๋ฐ๋ฒํธ๋ก ์ ๊ท ์ฌ์ฉ์ ๊ฐ์ ๊ตฌํ
https://avoc-o-d.tistory.com/50
[React] Firebase - Authentication์ผ๋ก ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํํ๊ธฐ
https://firebase.google.com/?hl=ko&gclid=CjwKCAjwpqCZBhAbEiwAa7pXeX-_LGJVKKRu3WA1Zbs-awSKivk12siAqSNzd60QEYrX7TKbOp59MxoCHK0QAvD_BwE&gclsrc=aw.ds Firebase Firebase๋ ๊ณ ํ์ง ์ฑ์ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐํ๊ณ ๋น์ฆ..
avoc-o-d.tistory.com
์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ์ฌ firebase ์ด๊ธฐํ๋ฅผ ํด์ฃผ๊ณ ,
src/service/firebase.js ์์ createUserWithEmailAndPassword๋ฅผ import ํ์ฌ ํ์๊ฐ์ ํ์ด์ง์์ ์ฌ์ฉํ ์ ์๋๋ก exportํด์ค๋๋ค.
๐ createUserWithEmailAndPassword ์๋ auth๊ฐ ๋งค๊ฐ๋ณ์๋ก ํ์ํ๋, auth๋ export ํด์ค๋๋ค!
import {
getAuth,
signInWithEmailAndPassword,
createUserWithEmailAndPassword,
GoogleAuthProvider,
} from "firebase/auth";
/** ํ๋ก์ ํธ config */
const firebaseConfig = {
apiKey: process.env.REACT_APP_FIREBASE_API_KEY,
...
};
// Initialize Firebase
const app = initializeApp(firebaseConfig);
// Authentication SDK ์ถ๊ฐ ๋ฐ ์ด๊ธฐํ
// Initialize Firebase Authentication and get a reference to the service
const auth = getAuth(app);
export {
auth,
signInWithEmailAndPassword,
createUserWithEmailAndPassword,
googleAuthProvider,
};
์ ๋ ํ์๊ฐ์ ํ์ด์ง๋ฅผ SignUp.js๋ก ์์ฑํ์์ต๋๋ค.
์๋๋ SignUp.js ์์ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ด๋ฉ์ผ, ๋น๋ฐ๋ฒํธ form์ ์ ์ถํจ์ผ๋ก์จ ํ์๊ฐ์ ์ ์งํํ๋ ํจ์์ ๋๋ค.
ํนํ, catch ์์ ๊ฑธ๋ฆฌ๋ ํ์๊ฐ์ ์ค๋ฅ๋ ์ด๋ฏธ firebase์์ ์ ํด์ง ์ด๋ฉ์ผ ์ ๊ท์๊ณผ ๋น๋ฐ๋ฒํธ ์ ๊ท์์ ๋ฐ๋ฅธ ์ฝ๋๊ฐ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๊น ์๋์ ๊ฐ์ด ๊ทธ์ ๋ฐ๋ฅธ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๋ฉด ๋ฉ๋๋ค.
๋งค์ฐ ๊ฐํธํ์ฃ !!! ๐ฅ๐ฅ
...
async function handleSubmit(event) {
event.preventDefault();
setEmailLog(false);
setPasswordLog(false);
/** ๋น๋ฐ๋ฒํธ ๊ฒ์ฌ */
if (validatePassword()) {
await createUserWithEmailAndPassword(auth, email, password)
.then((res) => {
// ํ์๊ฐ์
์ฑ๊ณต ์ ์ํํ ์ฝ๋
})
.catch((err) => {
switch (err.code) {
case "auth/email-already-in-use": {
return setError("์ด๋ฏธ ์ฌ์ฉ์ค์ธ ์ด๋ฉ์ผ์
๋๋ค.");
}
case "auth/invalid-email": {
return setError("์ด๋ฉ์ผ์ ์
๋ ฅํด์ฃผ์ธ์");
}
case "auth/weak-password": {
return setError(
"์์ ํ์ง ์์ ๋น๋ฐ๋ฒํธ์
๋๋ค.\n๋ค๋ฅธ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ฉํด ์ฃผ์ธ์."
);
}
case "auth/operation-not-allowed": {
return setError("operation-not-allowed \n๊ด๋ฆฌ์์๊ฒ ๋ฌธ์ํ์ธ์ ");
}
}
});
}
}
...
02. ํ์๊ฐ์ ์ ๋ ฅ๊ฐ ์ ์ด
์ ๋ ฅ๊ฐ์ด ํ๋๋ผ๋ ๋น ์ ธ์์ผ๋ฉด(์ด๋ฉ์ผ, ๋น๋ฐ๋ฒํธ, ๋น๋ฐ๋ฒํธ ํ์ธ, ๊ฐ์ธ์ ๋ณด ์์ง ๋์ ์ฒดํฌ ๋ฐ์ค), ํ์๊ฐ์ ํ๊ธฐ ๋ฒํผ์ด ํ์ฑํ ๋์ง ์๊ฒ ํ์ฌ ํ์๊ฐ์ ์ด ๋ถ๊ฐํ๋๋ก ํ์์ต๋๋ค.
๋น๋ฐ๋ฒํธ์ ๋น๋ฐ๋ฒํธ ํ์ธ ๋ด์ฉ์ด ๋ค๋ฅด๋ฉด ํ์๊ฐ์ ์ด ๋ถ๊ฐํ๋๋ก ํ์์ต๋๋ค.
์๋๋ SignUp.js ์์ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋น๋ฐ๋ฒํธ์ ๋น๋ฐ๋ฒํธ ํ์ธ์ด ๊ฐ์์ง ํ์ธํ๋ ํจ์์ ๋๋ค.
/** ๋น๋ฐ๋ฒํธ ๋ง๋์ง ๊ฒ์ฌ */
function validatePassword() {
let isValid = true;
if (password !== "" && confirmPassword !== "") {
if (password !== confirmPassword) {
isValid = false;
setError("๋น๋ฐ๋ฒํธ๊ฐ ๋ง์ง ์์ต๋๋ค.");
}
}
...
return isValid;
}
์ด๋ฉ์ผ ์ ๊ท์์ ๋ฐ๋ผ ์ ๋ ฅํ์ง ์์, ํ์๊ฐ์ ์ด ๋ถ๊ฐํฉ๋๋ค.
๋น๋ฐ๋ฒํธ๊ฐ ๋๋ฌด ์งง๊ฑฐ๋ ๋จ์ ์ซ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๋ค๋ฉด ์์ ํ์ง ์์ ๋น๋ฐ๋ฒํธ๋ก ์ธ์ํ์ฌ, ํ์๊ฐ์ ์ด ๋ถ๊ฐํฉ๋๋ค.
์ด๋ฏธ ๊ฐ์ ํ ์ด๋ฉ์ผ์ด๋ผ๋ฉด, ํ์๊ฐ์ ์ด ๋ถ๊ฐํฉ๋๋ค.
๋๋ค์์ฒ๋ผ ์ฌ์ฉ์ ์๋ณ์ ์ํ display ID ๊ฐ์ ๊ฒฝ์ฐ๋ ์๋์ API๋ฅผ ํตํด ์ค์ ํ ์ ์์ต๋๋ค.
https://firebase.google.com/docs/auth/web/manage-users?hl=ko
Firebase์์ ์ฌ์ฉ์ ๊ด๋ฆฌํ๊ธฐ
Google์ ํ์ธ ๊ณต๋์ฒด๋ฅผ ์ํ ์ธ์ข ์ ํ๋ฑ์ ์ถ๊ตฌํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. ์์ธํ ์์๋ณด๊ธฐ ์๊ฒฌ ๋ณด๋ด๊ธฐ Firebase์์ ์ฌ์ฉ์ ๊ด๋ฆฌํ๊ธฐ ์ปฌ๋ ์ ์ ์ฌ์ฉํด ์ ๋ฆฌํ๊ธฐ ๋ด ํ๊ฒฝ์ค์ ์ ๊ธฐ์ค์ผ๋ก ์ฝ
firebase.google.com
ex ) ๋๋ค์ ์ ๋ ฅ ์ ์ฐจ๊ฐ ์๋ ํ์๊ฐ์ ์์
- ํ์๊ฐ์
์งํ
- createUserWithEmailAndPassword ์ด์ฉํ์ฌ ์ด๋ฉ์ผ, ๋น๋ฐ๋ฒํธ๋ก ํ์๊ฐ์
- ์ ํด ID ๊ณต๊ธ์ ์ฒด ์ต์ด ๋ก๊ทธ์ธ
- ๋ณ๋์ ํ์ด์ง ํน์ ๋ชจ๋ฌ์ฐฝ์ ์ด์ฉํ์ฌ ๋๋ค์ ์ ๋ ฅ
- ์ ๋ ฅ๋ ๋๋ค์์ displayName์ ๋์