โ๏ธ ๋ฌธ์ ์ํฉ
๋ก๊ทธ์ธ ๋ก์ง์์ ์ฌ์ฉ์๊ฐ ์๋ชป๋ ์ด๋ฉ์ผ ๋๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ ๊ฒฝ์ฐ "์๋ชป๋ ์ด๋ฉ์ผ ๋๋ ๋น๋ฐ๋ฒํธ์ ๋๋ค." ๋ผ๋ alert ๋ฉ์์ง๊ฐ ๋ํ๋๋๋ก ๊ฐ๋ฐํ๋ค.
์ด ๋ก์ง์ ๊ฐ๋ฐ ๋ชจ๋์์๋ ์ ์์ ์ผ๋ก ๋์ํ์ผ๋, ํ๋ก์ ์ ๋ชจ๋์์๋ ์ฌ์ฉ์ ์ ์ ๋ฉ์์ง๊ฐ ์๋ ์๋ฒ ์ค๋ฅ ๋ฉ์์ง๊ฐ ์๋ฆผ์ฐฝ์ ๊ทธ๋๋ก ๋ ธ์ถ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ๐คฏ
ํด๋น ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ์์ธ์ ํ์ ํด ๋ณด๊ณ ํด๊ฒฐํ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด ๋ณด์!!
โ๏ธ ์ค๋ฅ
ํ๋ก๋์ ๋ชจ๋์์ ๊ธฐ๋ํ ๊ฒฐ๊ณผ
๊ฐ๋ฐ๋ชจ๋์์๋ ์๋ํ ๋๋ก ๋ฉ์์ง๊ฐ ํ์๋์๋ค.
ํ๋ก๋์ ๋ชจ๋์์ ์ค์ ๊ฒฐ๊ณผ
ํ์ง๋ง ํ๋ก์ ์ ๋ชจ๋์์๋ ์๋์ ๊ฐ์ด ์๋ฒ ์ค๋ฅ ๋ฉ์์ง๊ฐ ๊ทธ๋๋ก ๋ ธ์ถ๋์๋ค. ใ ใ
โ๏ธ ์์ธ ๋ถ์
์ด ๋ฌธ์ ๋ Next.js ์ ๊ฐ์ ํ๋ ์์ํฌ์ ํ๋ก๋์ ๋น๋ ํ๊ฒฝ ํน์ฑ ๋๋ฌธ์ ๋ฐ์ํ ๊ฒ์ด์๋ค.
- ํ๋ก๋์ ๋ชจ๋์์๋ ๋๋ฒ๊ทธ ์ ๋ณด๋ฅผ ์จ๊ธฐ๊ณ , ์๋ฌ ๋ฉ์์ง๋ฅผ ๊ฐ์ํํ๋ฉฐ, ํด๋ผ์ด์ธํธ์ ์๋ฌ์ ๊ณ ์ ์๋ณ์์ธ digest ๊ฐ์ ๋ฐํํ๋ค.
- ์๋ฒ์์ throw new Error ๋ฅผ ์ฌ์ฉํด ์๋ฌ๋ฅผ ๋ฐ์์ํค๋ฉด, ํด๋ผ์ด์ธํธ๋ ์๋ฌ์ ๊ตฌ์ฒด์ ์ธ ์ ๋ณด๋ฅผ ์ ์ ์๊ณ digest ๊ฐ๋ง ํ์๋๋ค.
Next.js ๊ณต์๋ฌธ์ ์์๋ ์์๋ ์๋ฌ ์ฒ๋ฆฌ ๋ฐฉ์์ ๋ํด ๊ฐ์ด๋๋ฅผ ์ ๊ณตํ๊ณ ์๊ณ , ํด๋น ๋ฐฉ์์ ๋ฐ๋ฅด๋ฉด throw new Error ๋ฅผ ์ฌ์ฉํ์ง ๋ง๊ณ ํด๋ผ์ด์ธํธ์ ๋ฉ์์ง๋ฅผ ์ง์ ๋ฐํํด์ผ ํ๋ค๊ณ ํ๋ค.
๊ธฐ์กด ์ฝ๋
์๋๋ ๋ฌธ์ ๊ฐ ์์๋ ๊ธฐ์กด ์ฝ๋์ด๋ค. ์๋ฒ์์ throw new Error ๋ฅผ ํตํด ์๋ฌ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์์ด ๋ฌธ์ ์ ํต์ฌ์ด๋ค.
export const login = async (formData: { email: string; password: string }) => {
const supabase = createClient();
const { data, error: loginError } = await supabase.auth.signInWithPassword({
email: formData.email,
password: formData.password,
});
if (loginError?.code === 'invalid_credentials') throw new Error('์ ํจํ์ง ์๋ ์ฌ์ฉ์์
๋๋ค.');
if (loginError) throw new Error('์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋ค์ ์๋ํด์ฃผ์ธ์.');
console.error(loginError);
return { message: '๋ก๊ทธ์ธ ์๋ฃ๋์์ต๋๋ค.', data: data };
};
- throw new Error ๋ก ์๋ฌ๋ฅผ ๋์ง๋ฉด, ํ๋ก๋์ ๋ชจ๋์์๋ ์๋ฌ ๋ฉ์์ง๊ฐ digest ๊ฐ์ผ๋ก ๋ณํ๋์ด ํด๋ผ์ด์ธํธ๋ก ์ ๋ฌ๋๋ค.
- ๊ฒฐ๊ณผ์ ์ผ๋ก, ์ฌ์ฉ์๋ ์ํ๋ ๋ฉ์์ง๋ฅผ ๋ณผ ์ ์๊ฒ ๋๋ค.
โ๏ธ ํด๊ฒฐ ๋ฐฉ๋ฒ
๊ณต์ ๋ฌธ์์ ๊ถ์ฅ ๋ฐฉ์์ ๋ค๋ผ, ์๋ฌ ๋ฉ์์ง๋ฅผ ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ์ง์ ๋ฐํํ๋๋ก ์ฝ๋๋ฅผ ์์ ํ๋ค.
export const login = async (formData: { email: string; password: string }) => {
const supabase = createClient();
const { data, error: loginError } = await supabase.auth.signInWithPassword({
email: formData.email,
password: formData.password,
});
console.error(loginError);
if (loginError?.code === 'invalid_credentials') return { error: { message: '์๋ชป๋ ์ด๋ฉ์ผ ๋๋ ๋น๋ฐ๋ฒํธ์
๋๋ค.' } };
if (loginError) throw new Error('์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋ค์ ์๋ํด์ฃผ์ธ์.');
return { message: '๋ก๊ทธ์ธ ์๋ฃ๋์์ต๋๋ค.' };
};
โ๏ธ ๊ฒฐ๊ณผ
- ๊ฐ๋ฐ ๋ชจ๋์ ํ๋ก๋์ ๋ชจ๋ ๋ชจ๋์์ ๋์ผํ๊ฒ ๋์ํ๋ค.
- ํด๋ผ์ด์ธํธ๋ "์๋ชป๋ ์ด๋ฉ์ผ ๋๋ ๋น๋ฐ๋ฒํธ์ ๋๋ค." ๋ฉ์์ง๋ฅผ ์ ์์ ์ผ๋ก ํ์ํ๋ค.
- ์์์น ๋ชปํ ์๋ฌ๋ ๊ธฐ์กด ๋ฐฉ์๋๋ก ์ฒ๋ฆฌ๋๋ฉฐ, ํ๋ก๋์ ํ๊ฒฝ์์๋ ๋๋ฒ๊ทธ ์ ๋ณด๊ฐ ์์ ํ๊ฒ ์จ๊ฒจ์ง๋ค.
โ๏ธ ๊ฒฐ๋ก
์ด ๋ฌธ์ ๋ฅผ ํตํด ํ๋ก๋์ ํ๊ฒฝ์์์ ์๋ฌ ์ฒ๋ฆฌ ๋ฐฉ์์ ์ค์์ฑ์ ๋ค์ ํ๋ฒ ๋๋ ์ ์์๋ค. ํนํ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ์๋ฌ ๋ฉ์์ง ์ ๋ฌ ๋ฐฉ์์ ๋ช ํํ๊ฒ ์ดํดํ๊ณ , ๊ณต์ ๋ฌธ์์ ๊ถ์ฅ ๋ฐฉ์์ ๋ฏธ๋ฆฌ ํ์ธํด ๋ด์ผ๊ฒ ๋ค๊ณ ๋ค์งํ ์ ์์๋ค.