ํ์๊ฐ์
๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋ก๋ฉ์ ํ์ํ๊ธฐ ์ํด์
//ํ์๊ฐ์
ํด๋ฆญ ์ ์คํ๋๋ ํจ์
const onRegister = async () => {
try {
loading.value = true; //๋ก๋ฉ ์์
๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋ก๋ฉ์ ๊ฐ์ true๋ก ๋ณ๊ฒฝํ๊ณ
finally๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฑด, ์ ์์ ์ผ๋ก ์ข
๋ฃ๋๊ฑด ์ผ๋จ ๋์ด๋๋ฉด ๋ก๋ฉ ๊ฐ์ false๋ก ๋ง๋ค์ด์ค๋ค.
} catch (e) {
console.log("์๋ฌ๋ฐ์", e);
alert(e.message);
} finally {
loading.value = false; //๋ก๋ฉ ์ข
๋ฃ
}
};
ํ์๊ฐ์
๋ฒํผ์ ๋ ๊ฐ๋ง๋ค์ด์
v-if์ v-else๋ฅผ ์ฌ์ฉํ์ฌ, ๋ก๋ฉ ์ค์ ํ์๋๋ ๋ฒํผ๊ณผ ๋ก๋ฉ์ด ์๋ ๋ ํ์๋๋ ๋ฒํผ์ ๊ตฌ๋ถํ์ฌ ๋ง๋ค์ด์ค๋ค.
<button v-if="loading" class="w-96 rounded bg-light text-white py-4">
ํ์๊ฐ์
์ค ์
๋๋ค.
</button>
<button
v-else
@click="onRegister"
class="w-96 rounded bg-primary text-white py-4 hover:bg-dark"
>
ํ์๊ฐ์
</button>
๊ทธ๋ฆฌ๊ณ ํ์๊ฐ์
์ ์์ฑํ๋ ๋ฐ์ดํฐ์ ๊ฐ์
์ผ์ , ํ๋กํ ์ฌ์ง ๋ฑ ํ์ํ ๋ฐ์ดํฐ๋ค์ db๋ก ๊ด๋ฆฌํ ๊ฑด๋ฐ
์ด ๊ธฐ๋ฅ๋ค์ firestore๋ฅผ ํตํ์ฌ ์งํํ๋ค.
https://firebase.google.com/docs/firestore/manage-data/add-data?hl=ko&_gl=1*13vbxpz*_up*MQ..*_ga*OTI3OTE3MDgxLjE3MTA1OTA5NDg.*_ga_CW55HF8NVT*MTcxMDU5MDk0OC4xLjAuMTcxMDU5MDk0OC4wLjAuMA..
Cloud Firestore์ ๋ฐ์ดํฐ ์ถ๊ฐ | Firebase
์๊ฒฌ ๋ณด๋ด๊ธฐ Cloud Firestore์ ๋ฐ์ดํฐ ์ถ๊ฐ ์ปฌ๋ ์
์ ์ฌ์ฉํด ์ ๋ฆฌํ๊ธฐ ๋ด ํ๊ฒฝ์ค์ ์ ๊ธฐ์ค์ผ๋ก ์ฝํ
์ธ ๋ฅผ ์ ์ฅํ๊ณ ๋ถ๋ฅํ์ธ์. ๋ค์๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก Cloud Firestore์ ๋ฐ์ดํฐ๋ฅผ ์ธ ์ ์์ต๋
firebase.google.com
import { doc, setDoc } from "firebase/firestore";
import { auth, db } from "../firebase";
import { useRouter } from "vue-router";
setDoc์ ์ฌ์ฉํ์ฌ ์ ์ฅํ๋ค.
// ๋ณ์ ref(์ด๊ธฐ๊ฐ) usestate ์ ๋์ผ
const username = ref("");
const email = ref("");
const password = ref("");
const loading = ref(false);
const router = useRouter();
//ํ์๊ฐ์
ํด๋ฆญ ์ ์คํ๋๋ ํจ์
const onRegister = async () => {
try {
loading.value = true; //๋ก๋ฉ ์์
//์ธ์ฆ ์ฌ์ฉ์ ์ถ๊ฐ ๋ฐ ์ ์ ์ ๋ณด๋ง ๊ฐ์ ธ์ค๊ธฐ
const { user } = await createUserWithEmailAndPassword(
auth,
email.value,
password.value
);
//ํ์๊ฐ์
์ ์ ์ ์ ๋ณด db ์ ์ฅํ๊ธฐ
await setDoc(doc(db, "users", user.uid), {
uid: user.uid,
email: email.value,
profile_image_url: "/profile/jpeg",
num_tweets: 0,
followers: [],
followings: [],
created_at: Date.now(),
});
alert("ํ์๊ฐ์
์ ์ฑ๊ณตํ์์ต๋๋ค. ๋ก๊ทธ์ธ ํด์ฃผ์ธ์.");
//ํ์๊ฐ์
์ฑ๊ณต ์ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ์ด๋
router.push("/login");
} catch (e) {
console.log("์๋ฌ๋ฐ์", e);
alert(e.message);
} finally {
loading.value = false; //๋ก๋ฉ ์ข
๋ฃ
}
};
๊ทธ๋ฆฌ๊ณ ์ ์์ ์ผ๋ก ๊ฐ์
์ด ์๋ฃ๋๋ฉด alert์ ์ฌ์ฉํ์ฌ ์ฑ๊ณตํจ์ ์๋ฆผ๊ณผ ๋์์ router๋ฅผ ์ฌ์ฉํ์ฌ loginํ์ด์ง๋ก ์ด๋ํ๋ค./
์ฑ๊ณต ์ ์๋์ ๊ฐ์ด firestore์ ์ ์์ ์ผ๋ก ์ถ๊ฐ๋จ์ ํ์ธํ ์ ์๋ค.