[React-Native, Supabase] ์ฌ์ฉ์ ๋ก๊ทธ์ธ๋ถํฐ ํ์ ํํด๊น์ง.. ์ฌ์ฉ์ ์ธ์ฆ ๊ธฐ๋ฅ ๊ตฌํํ๊ธฐ
ํธ๋ฆฝ์์ด ์ฑ ๊ฐ๋ฐ์์ ๊ฐ์ฅ ๋ง์ ์๊ฐ์ ์์ ๋ก๊ทธ์ธ, ์ธ์ฆ ๊ธฐ๋ฅ ๊ตฌํ..๐ซ
ํ๋ก๊ทธ๋๋จธ์ค์์ ํ ํ๋ก์ ํธ๋ก ๊ฐ๋ฐํ ๋ ๋ง๊ฐ ๊ธฐํ ๋ด์ ์ฑ ๊ฐ๋ฐ์ ์์ฑํด์ผ ํด์ ์ฐ๋ฆฌ์ ์ฃผ์ ์๋น์ค์ ์ง์คํ๊ณ ์ฌ์ฉ์ ๋ก๊ทธ์ธ ์ชฝ์ ์ต๋ํ ๊ฐ๋จํ ๊ตฌํํ์๋ค.
์ด์ ์ฑ ์ถ์๋ฅผ ์ํ ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ ์ ๋๋ก ๋ ์ธ์ฆ ๊ธฐ๋ฅ์ ๊ตฌํํด์ผ ํ๋ค. ์ฌ์ฉ์ ๋ก๊ทธ์ธ/ํ์๊ฐ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ฒ ์ฒ์์ด์๊ณ ์๊ฐ๋ณด๋ค ๋ง์ ๋ก์ง์ด ํ์ํ๋ค. ํ์๊ฐ์ ๋ถํฐ ๋ก๊ทธ์ธ, ๊ทธ๋ฆฌ๊ณ ๋น๋ฐ๋ฒํธ๋ฅผ ๊น๋จน์ ์ฌ์ฉ์๋ฅผ ์ํ ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ๊ธฐ๋ฅ, ์์ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ, ์ฑ ๋ด์์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ธฐ๋ฅ, ํ์ ํํด ๊ธฐ๋ฅ๊น์ง ๊ตฌํํ ๊ฒ ๋ง์๋ค.
์ฌ์ค ์ฌ์ฉ์ ์ธ์ฆ๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ฅ๋ค์ ์ฑ์ ์ง์ ์ ์ธ ๊ด๋ จ์ด ์๊ณ , ์ฑ์ ํต์ฌ ์์๋ ์๋์ง๋ง ๊ผญ ํ์ํ ๊ธฐ๋ณธ์ ์ธ ์์์ด๋ค.
๋ณด์ด์ง ์๋ ๊ณณ์์ ์ด์ฌํ ์ผํ๊ณ ์๋ ๊ธฐ๋ฅ์ด๋๊น..

์ฐ์ , ๋ก๊ทธ์ธ์ด ํ์ํ ๋ชจ๋ ์๋น์ค์์ ๊ณตํต์ผ๋ก ํ์ํ ๊ธฐ๋ฅ๋ค์ ์๊ฐํด๋ณด๋ฉด
- ํ์๊ฐ์
- ๋ก๊ทธ์ธ
- ๊ฐํธ ์์ ๋ก๊ทธ์ธ (์ ํ)
- ์์ด๋/๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ
- ๋น๋ฐ๋ฒํธ ์ฌ์ค์
- ํ์ ํํด
์ด๋ฐ ๊ธฐ๋ฅ๋ค์ด ๊ผญ ํ์ํ๋ค.
์ฐ๋ฆฌ ํ์ ์ฒ์์ Firebase๋ฅผ ์ฌ์ฉํ๋๋ฐ Firebase๋ ๊ด๊ณํ ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋ no-sql๊ธฐ๋ฐ์ด๋ค ๋ณด๋ ๋ฐ์ดํฐ ๊ด๋ฆฌ๊ฐ ์ข ๋ถํธํ๊ณ , ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ต์ํ๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ตญ Supabase๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค.
(๊ทธ๋์ Firebase-Authentication์ผ๋ก ๊ตฌํํ๋ ์ธ์ฆ ์ชฝ๋ ๋ชจ๋ Supabase๋ก ๋ฐ๊ฟจ๋ค..๐ซ )
์ธ์ฆ ์ชฝ์ Firebase๊ฐ ์ข ๋ ๊ฐํธํ๋ ๊ฒ ๊ฐ๋ค..
Supabase Auth
supabase๋ auth.users์์ ์ฌ์ฉ์๋ฅผ ๊ด๋ฆฌํ๋ค.
๊ทธ๋์ ๋ณ๋์ user ํ ์ด๋ธ์ ๋ง๋ค๊ธฐ ์ํด์ users๋ผ๋ ํ ์ด๋ธ ๋ช ์ ์ฌ์ฉํ ์ ์๊ณ ๋ค๋ฅธ ๋ช ์นญ์ ์ฌ์ฉํด์ ํ ์ด๋ธ์ ๋ง๋ค์ด์ผ ํ๋ค.
auth users์๋ Display Name, Email, Phone, Provider, Created, Last Sign In, User UID ์ปฌ๋ผ์ด ์๋ค.
Provider๋ ์ด๋ค ๋ฐฉ์์ผ๋ก ๋ก๊ทธ์ธํ๋์ง ์ ์ ์๋ค. (Email, Kakao ...)
ํ์ ๋ฑ๋ก ์ ์๋ ์์ฑ๋๋ User UID๋ ์ง์ ๋ง๋ user_profiles ํ ์ด๋ธ์ id๋ก ์ฌ์ฉํ๋ค.
์ด๋ฉ์ผ๋ก ๋ก๊ทธ์ธํ๊ธฐ (๋น๋ฐ๋ฒํธ ๊ธฐ๋ฐ)
https://supabase.com/docs/guides/auth/passwords
Password-based Auth | Supabase Docs
Allow users to sign in with a password connected to their email or phone number.
supabase.com
๋น๋ฐ๋ฒํธ๋ก ๋ก๊ทธ์ธํ๋ ์ผ๋ฐ์ ์ธ ํ์๊ฐ์ /๋ก๊ทธ์ธ๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ ๊ตฌํํ๋ค.
React Native๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด ๊ธฐ๋ฐ์ด๊ธฐ ๋๋ฌธ์ ๊ณต์ ๋ฌธ์์ JavaScript ์ฝ๋๋ฅผ ๋ณด๋ฉฐ ์ ์ ํ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
- ํ์๊ฐ์
const { data: user, error } = await supabase.auth.signUp({
email,
password,
options: {
data: {
name,
},
},
});
supabase auth์๋ signUp ํจ์๋ก ํ์๊ฐ์ ์ ํ ์ ์๋ค.
ํ์๊ฐ์ ์ ํ๋ฉด auth.users์ ์ฌ์ฉ์๊ฐ ์ถ๊ฐ๋๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก user_profiles ํ ์ด๋ธ์ ์ฌ์ฉ์ ์ ๋ณด๋ค์ ์ถ๊ฐํ๋ ๋ก์ง์ด ํ์ํ๋ค.
์ด๋ supabase์ trigger/function ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ค.
์ํํ ํจ์(function)๋ฅผ ๋ง๋ค๊ณ ์๋ฅผ๋ค์ด Auth.users์ ์์ฑ๋ ์ ์ ์ id, email ๋ฑ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ฐ์ดํฐ๋ฅผ user_profiles์ ์ถ๊ฐํด๋ผ๋ ํจ์๋ฅผ ๋ง๋ค๊ณ ์ด๋ฅผ ํธ๋ฆฌ๊ฑฐ๋ก Auth.users์ ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋ ๊ฒฝ์ฐ ๋ฐฉ๊ธ ๋ง๋ ํจ์๋ฅผ ์ํํ๋ค. ๋ ์ ์๊ฐ ํ์ํ๋ค.
supabase์ ๋น๋ฐ๋ฒํธ ๊ธฐ๋ฐ ์ด๋ฉ์ผ ๋ก๊ทธ์ธ์ ๊ฒฝ์ฐ ์ด๋ฉ์ผ ์ธ์ฆ์ ํด์ผ ๋ก๊ทธ์ธ ๊ฐ๋ฅํ๊ฒ ํ ๊ฑด์ง ์ ํํ ์ ์๋ค.
ํธ๋ฆฝ์์ด๋ ์ด ๊ธฐ๋ฅ์ ํ์ฉํด ์ด๋ฉ์ผ ์ธ์ฆ์ด ๋์์ ๋ ์ํ๋ฅผ ๋ณ๊ฒฝํ์ฌ ๋ก๊ทธ์ธํ ์ ์๋๋ก ๊ตฌํํ๋ค.
์ด๋ฉ์ผ์ ์ธ์ฆํ์ง ์์ ์ฌ์ฉ์์ ๊ฒฝ์ฐ ๋ก๊ทธ์ธํ ๋ ์ด๋ฉ์ผ ์ธ์ฆ์ ์๋ฃํด๋ฌ๋ผ๋ ๋ชจ๋ฌ๋ ๊ตฌํํ๋ค.
https://supabase.com/docs/guides/auth/auth-email-templates
Email Templates | Supabase Docs
Learn how to manage the email templates in Supabase.
supabase.com
supabase์ ์ด๋ฉ์ผ ํ ํ๋ฆฟ ๊ธฐ๋ฅ์ด ์์ด์ ์ด๋ค์์ผ๋ก ์ด๋ฉ์ผ์ ๋ณด๋ผ ์ง ์ปค์คํ ํ ์ ์๋ค.
๋น๋ฐ๋ฒํธ ์ฌ์ค์ ๊ณผ ํ์๊ฐ์ ํ ํ๋ฆฟ์ด ๋ฐ๋ก ๊ตฌ๋ถ๋์ด ์๋ค.
- ํ์๊ฐ์ ์ด๋ฉ์ผ ์ธ์ฆ ํ ํ๋ฆฟ
- ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ์ด๋ฉ์ผ ์ธ์ฆ ํ ํ๋ฆฟ
์ด๋ฉ์ผ ์ธ์ฆํ๊ธฐ, ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ๋ฒํผ์ ๋๋ฅผ ๊ฒฝ์ฐ RedirectTo๋ฅผ ์ค์ ํด๋์ ์ฑ ๋ด์ ์ง์ ํ ํ์ด์ง๋ก ์ด๋ํ๊ฒ ๋๋ค.
์ฑ์ ๋งํฌ๋ React-Native์ ๋ฅ๋งํฌ ๊ธฐ๋ฅ์ ์ฌ์ฉํด์ ์น์์ ์ง์ URL๋ก ํ์ด์ง๋ฅผ ์ด๋ํ๋ฏ์ด ์ฑ๋ ์ง์ ํ ํ์ด์ง๋ก ์ด๋ํ ์ ์๋ค.
ํ์๊ฐ์ ํ ์ด๋ฉ์ผ ์ธ์ฆ์ ๊ฒฝ์ฐ์ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ์ด๋ํ๋๋ก ํ์๊ณ , ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ์ ๊ฒฝ์ฐ์ ์ด๋ฉ์ผ ์ธ์ฆ์ด ์๋ฃ๋์์ผ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ค์ ํ ์ ์๋ ํ์ด์ง๋ก ์ด๋๋๊ฒ ๊ตฌํํ๋ค.
์ฐธ๊ณ ๋ก ์ด๋ฉ์ผ ์ธ์ฆ์ ๊ฒฝ์ฐ, supabase ๋ฌด๋ฃ ๋ฒ์ ์ ์ด๋ฉ์ผ ์ ์ก ํ์์ ์ ํ์ ๋๊ณ ์๋ค.
ํ์๊ฐ์ 30ํ๋ผ๊ณ ํ๋ ๋ฐ ํ ์๊ฐ์ 2๋ฒ๋ฐ์ ์ ์ก์ด ์๋จ... ์ด๋ฉ์ผ ์ธ์ฆ ํ์๊ฐ ๋ง๋ค๊ณ ์ ์ ํ์ ํ๋ผ๋ ์๋ฆผ์ด ๋ฌ๋ค...
์ด ๋ฌธ์ ๋๋ฌธ์.. supabase์ ๋ฌธ์๋ฅผ ํ์ผ๋ PRO ๋ฒ์ ์ผ๋ก ์ฌ๋ฆฌ๋ ๊ฒ ์ข๋ค๋ ๋ต๋ณ์ด ์๊ณ .. ์ฑ์ ์ถ์ํ๊ฒ ๋๋ฉด ํ์๊ฐ์ ์ ์น๋ช ์ ์ธ ๋ฌธ์ ๊ฐ ๋๋ฏ๋ก PRO ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ ์ง ํ์๋ค๊ณผ ์ง์งํ๊ฒ ๊ณ ๋ฏผ์ค์ด๋ค.
** ์ถ๊ฐ
์ด๋ฉ์ผ ์ธ์ฆ ๋ฉ์ผ์ ๋ํด์ ๋ค๋ฅธ ํ๋ซํผ์ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค. supabase์์ ์ถ์ฒํ๋ ์๋น์ค ์ค ํ๋๋ฅผ ๊ณจ๋ผ ์ฌ์ฉํ๋ค.
resend๋ผ๋ ์ด๋ฉ์ผ ์ ์ก API๋ฅผ ์ ๊ณตํ๋ ์๋น์ค์ธ๋ฐ ๋๋ฉ์ธ๋ง ์์ผ๋ฉด ๋ฌด๋ฃ๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
๊ทธ๋์ resend ์ฌ์ฉ์ ์ํด ํธ๋ฆฝ์์ด ๋๋ฉ์ธ์ ๊ตฌ์ ํ๋ค.
https://resend.com/docs/dashboard/emails/introduction
Introduction - Resend
View email details See all the metadata associated with an email, including the sender address, recipient address, subject, and more. You can also see the email content as HTML or plain text. Understand email events Here are all the events that can be asso
resend.com
์นด์นด์ค๋ก ๋ก๊ทธ์ธํ๊ธฐ
์นด์นด์ค๋ก ๋ก๊ทธ์ธํ๊ธฐ์ ๊ฒฝ์ฐ์ ์นด์นด์ค ๊ฐ๋ฐ์ ํ์ด์ง์์ ์ค์ ์ด ํ์ํ๋ค.
Kakao Developers
์นด์นด์ค API๋ฅผ ํ์ฉํ์ฌ ๋ค์ํ ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํด๋ณด์ธ์. ์นด์นด์ค ๋ก๊ทธ์ธ, ๋ฉ์์ง ๋ณด๋ด๊ธฐ, ์น๊ตฌ API, ์ธ๊ณต์ง๋ฅ API ๋ฑ์ ์ ๊ณตํฉ๋๋ค.
developers.kakao.com
์นด์นด์ค ๋ก๊ทธ์ธ์ ๊ฒฝ์ฐ supabase docs์์ ์ฐธ๊ณ ํ๋ค.
https://supabase.com/docs/guides/auth/social-login/auth-kakao
Login with Kakao | Supabase Docs
Add Kakao OAuth to your Supabase project
supabase.com
react-native์์ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ก ๋์์์ง ์์ง๋ง JavaScript ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๋ฌธ์์ ๋์จ JavaScript ๋ฌธ๋ฒ์ ์ฐ๋ฉด ๋๋ค.
await supabase.auth.signInWithOAuth({
provider,
options: {
redirectTo: `http://example.com/auth/callback`,
},
})
์ด๋ฐ์์ผ๋ก provider๋ฅผ 'Kakao'๋ก ์ง์ ํด์ ์นด์นด์ค ๋ก๊ทธ์ธ์ ํ ์ ์๋ค.
์นด์นด์ค ๊ฐ๋ฐ์ ํ์ด์ง์ Supabase์์ ์ค์ ํ API ๋ฑ๋ฑ ์ฌ๋ฌ ์ธํ ํด์ผ ํ ๊ฒ ๋ง์ผ๋ ๋ค์ ๊ธ์์ ๋ ์์ธํ ์ค๋ช ํ๋ ๊ฒ ์ข์ ๊ฒ ๊ฐ๋ค.
์๋ฌดํผ ์ฐ๊ฒฐ์ ์ ํ๋๋ฐ iOS ๋ฌธ์ ์ธ๊ฑด์ง (ํ ์คํธ๋ฅผ xcode์์ ํจ) ์น๋ทฐ๋ ์ ์๋๊ณ ๋ฅ๋งํฌ ์ค์ ๋ ์๋ผ์ ํค๋ฉ๋ค๊ฐ...
๋ค๋ฅธ ํ์๋ถ์ด ์๋๋ก์ด๋์์ ๋ฅ๋งํฌ ์ฐ๊ฒฐํด์ ํธ์์๋ฆผ ๊ตฌํํ ๊ฑฐ ์ฐธ๊ณ ํด์ ์๋๋ก์ด๋์์ ์ฑ๊ณต์ ์ผ๋ก ์นด์นด์ค ๋ก๊ทธ์ธ์ ๊ตฌํํ ์ ์์๋ค.
์นด์นด์ค ์ธ์ฆ์ ๊ฒฝ์ฐ ๋ณ๋ ํ์๊ฐ์ ์์ด ์ต์ด ํ ๋ฒ ๋์ํญ๋ชฉ์ ๋์ ํ ์๋ ํ์๊ฐ์ /๋ก๊ทธ์ธ์ด ๋๋ค.
์ด๋ฐ ์ ์ ํธ๋ฆฌํ์ผ๋ ํ ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์๋ค..
๋ฐ๋ก ์ฝ๊ด ๋์์ ๋ํ ์ฒ๋ฆฌ์๋ค.
ํ์๊ฐ์ ์ ํ ๋ ์ฝ๊ด์ ํ์๋ก ๋์ํด์ผ๋ง ๊ฐ์ ์ ํ ์ ์๋๋ก ๊ตฌํํ๋๋ฐ
์นด์นด์ค์ ๊ฒฝ์ฐ ์ฐ๋ฆฌ ์ฑ์ ์ฝ๊ด์ ์ฝ์ ์๋ ์์ด ๋ก๊ทธ์ธ ๋๊ธฐ ๋๋ฌธ์ ์ด๋ป๊ฒ ๋์ํ๊ณ ๊ฐ์ ์ ์ํฌ์ง์ ๋ํ ๊ณ ๋ฏผ์ด ์์๋ค.
- ์นด์นด์ค ๊ฐ๋ฐ์ ์๋น์ค์์ ์ง์ ์ฝ๊ด ๋์ ํญ๋ชฉ์ URL๋ก ๋ฃ๊ธฐ
- ๊ฐ์ ํ, ์ฝ๊ด ๋์ ํ์ด์ง๋ก ๋์ด๊ฐ์ ์ฝ๊ด ๋์๋ฅผ ํด์ผ๋ง ํ์๊ฐ์ /๋ก๊ทธ์ธ ๋๊ฒ ํ๊ธฐ
1๋ฒ์ ์๋ํ๋ ค ํ๋๋ฐ ์ด ๋น์์ ์ฌ์ ์ ๋ฑ๋ก์ ํ์ง ์์ ์ฌ์ ์ ๋ฑ๋ก๋ฒํธ๊ฐ ์์๋ค.
๊ทธ๋์ 2๋ฒ์ ๊ตฌํํ๊ธฐ๋ก ํ๋ค.
๊ฐ๋ตํ ์ด๋ฐ ๋ก์ง์ผ๋ก ๊ตฌํํด ๋ณด์๋ค.
์นด์นด์ค๋ก ๋ก๊ทธ์ธ -> ์นด์นด์ค์ ์ ๋ณด ๋์ํญ๋ชฉ ๋์ -> ํธ๋ฆฝ์์ด ์ฑ ๋ด์ ์ฝ๊ด๋์ ํ์ด์ง๋ก Redirect (์ด ์ํ์์ user์ status๊ฐ INACTIVE๋ก ๋ก๊ทธ์ธํ ์ ์๋ ์ํ) -> ์ฝ๊ด ๋์ํ๋ฉด ACTIVE ์ํ๋ก ๋ณ๊ฒฝ๋์ด ๋ก๊ทธ์ธ
์์ ๊ฐ์ ๋ก์ง์ผ๋ก ๊ตฌํํ๋๋ฐ ๋ฌธ์ ๊ฐ ๋ ์๊ฒผ๋ค..
๋ง์ฝ ์ฌ์ฉ์๊ฐ ์ฝ๊ด์ ๋์ํ์ง ์๋๋ค๋ฉด..?
๊ทธ๋ ๋ค๋ฉด ์ฌ์ฉ์๋ ์ด ์ฑ์ ์ฌ์ฉํ์ง ์๊ฒ ๋ค๋ ์๋ฏธ๋ก ์๊ณ ์ฆ์ ์ ์ ์ ๊ฐ์ธ ์ ๋ณด๊ฐ ์ญ์ ๋์ด์ผ ํ๋ค.
ํ์๊ฐ์ ์ ๊ฒฝ์ฐ ์ฝ๊ด์ ๋์ํ์ง ์์ผ๋ฉด ํ์๊ฐ์ ์ด ๋ถ๊ฐํด ์ ์ ์ ์ ๋ณด๊ฐ DB์ ์ ์ฅ๋์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ง๋ง ์นด์นด์ค ๋ก๊ทธ์ธ์ ๊ฒฝ์ฐ ์นด์นด์ค์ ๋์ํญ๋ชฉ์๋ง ๋์ํ๋ฉด ๋ฐ๋ก ์ ์ ์ ์ ๋ณด๊ฐ ์ถ๊ฐ๋๊ธฐ ๋๋ฌธ์ ๊ทธ ์ ์ ๋ฅผ ๋ค์ ์ญ์ ํ๋ ๊ณผ์ ์ด ํ์ํ๋ค.
์นด์นด์ค๋ก ์ต์ด ๋ก๊ทธ์ธ ์, (Auth.users์ ์ถ๊ฐ๋ ๊ฒฝ์ฐ) ์ฝ๊ด ๋์ ํ์ด์ง๋ก ์ด๋ํ๊ฒ ๋๋๋ฐ
๋ฏธ๋์๋ฅผ ๋๋ ์ ๊ฒฝ์ฐ Auth.users์์ ์ฌ์ฉ์๋ฅผ ์ญ์ ํ๋ ํจ์์ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ค์ ํ๋๋ฐ... supabase์ Auth๋ ํจ์๋ก ์ฌ์ฉ์๋ฅผ ์ญ์ ํ ์๊ฐ ์์๋ค...!!!!

supabase ํ์ด์ง์์ ์๋์ผ๋ก ์ญ์ ํ๋ ๋ฐฉ๋ฒ๋ฐ์ ์๋ค๊ณ ํ์๊ณ .. ๋งค๋ฒ ํ์ธํ๋ฉฐ ์๋์ผ๋ก ์ญ์ ํ๊ธฐ์ ๋๋ฌด ๋ฒ๊ฑฐ๋ก์ด ๊ณผ์ ์ด์๋ค.
์ผ๋จ์... ์ฌ์ฉ์๊ฐ ์ฝ๊ด์ ๊ผญ ๋ด์ผํ๋ ์ค์ํ ๋ด์ฉ์ด๋ผ๊ณ ์๊ฐํด์ ์ผ๋จ ๋ฏธ๋์ ๋ฒํผ์ ๋ฐ๋ก ๋ง๋ค์ง ์๊ณ ๋ฌด์กฐ๊ฑด ๋์๋ฒํผ์ ๋๋ฌ์ผ๋ง ํธ๋ฆฝ์์ด์ ์ฑ์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ค.
๋ ๋ฒ์งธ ๋ฌธ์ ๋ ์ฌ์ฉ์๊ฐ ๋ค๋ก๊ฐ๊ธฐ ํ์ ๋ ํ์ผ๋ก ์ด๋ํ๋ค๋ ๋ฌธ์ ์๋ค... ์ด๋ฏธ ์นด์นด์ค ๋ก๊ทธ์ธ์ผ๋ก ์ธ์ฆ ํ ํฐ์ ๊ฐ์ง ์ฌ์ฉ์์ด๊ธฐ ๋๋ฌธ์ ์ฝ๊ด ๋์ ํ์ด์ง์์ ๋ค๋ก๊ฐ๊ธฐ ํ ๊ฒฝ์ฐ ํ์ผ๋ก ์ด๋๋๋ ๋ฌธ์ ๊ฐ ์์๋ค. ์ด๋ React-Native์ BackHandler๋ผ๋ ๊ธฐ๋ฅ์ผ๋ก ํด๊ฒฐํ๋ค. ์ฒ์์ react-navigation ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ต์ ์ ์ค์ ํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋๋ฐ ๋ค๋ฅธ ํ์ด์ง์์๋ ๋ค๋ก๊ฐ๊ธฐ๊ฐ ์๋๋ ์ด์๊ฐ ์์ด์ BackHandler๋ฅผ ํตํด์ ์ฝ๊ด ๋์ ํ์ด์ง์ ์ด๋ฒคํธ๋ฅผ ์ ์ฉํ๋ค.
useEffect(() => {
const backHandler = BackHandler.addEventListener('hardwareBackPress', () => {
return true;
});
return () => backHandler.remove();
}, [])
์ผ๋จ ์ด๋ฌํ ๋์ ๋ฐฉ์์ ๋น์ฅ ๊ธํ๊ฒ ์ค์ ํด ๋๊ฑฐ๋ผ,, ์ถํ์ 1๋ฒ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ ์ ๋ฑ๋ก์ฆ์ ๋ฐ๊ธ ๋ฐ๊ณ ์นด์นด์ค ๊ฐ๋ฐ์์์ ์ธ์ฆ์ด ๋๋ฉด ์นด์นด์ค ๋์ํญ๋ชฉ ํ์ด์ง์ ์ฐ๋ฆฌ์ ์ฝ๊ด์ URL๋ก ๋ฃ๋ ๋ฐฉ๋ฒ์ ๊ฒฐ๊ตญ ์งํํ๊ธฐ๋ก ํ๋ค.
(๋ณธ๊ฒฉ ์ถ์ ์ ์ ์์ ๋ ์์ ์ด๋ค.)
์์ด๋/๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ
ํ์๊ฐ์ ์ด ํ์ํ ์ฑ์ ๊ฒฝ์ฐ ๊ผญ ํ์ํ ๊ธฐ๋ฅ์ผ๋ก ๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ, ํ์ํํด ๊ธฐ๋ฅ์ด ์๋ค.
์ฐ๋ฆฌ ์ฑ์ ๊ฒฝ์ฐ ์์ด๋๊ฐ ์ด๋ฉ์ผ์ด๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ์์ด๋ ์ฐพ๊ธฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์๊ณ ๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ๋ผ๊ธฐ ๋ณด๋ค๋ ์ฌ์ค์ ์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
๋น๋ฐ๋ฒํธ ์ฌ์ค์ ์ ๊ฒฝ์ฐ, ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ ํ๋ ค๋๋ฐ ๋น๋ฐ๋ฒํธ๋ฅผ ๊น๋จน์์ ๋ ์ฌ์ค์ ํ ์ ์๋ ๊ธฐ๋ฅ๊ณผ ์ฑ ๋ด์ ๊ฐ์ธ์ ๋ณด ์ค์ ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ์ด ๋ ๊ฐ์ง ๊ฒฝ์ฐ์ ๋ก์ง์ด ํ์ํ๋ค.
์ฑ ๋ด์์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณ๊ฒฝํ ๋ ์ด๋ฏธ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ์ด๋ฉ์ผ ์ธ์ฆ์ ๊ฑฐ์น์ง ์์์ง๋ง ๋ก๊ทธ์ธ ์ ์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด ์ด๋ฉ์ผ ์ธ์ฆ ๊ณผ์ ์ด ํ์ํ๋ค.
supabase์์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ค์ ํ ์ ์๋ ํจ์๋ฅผ ์ ๊ณตํ๊ณ ์๋ค.
await supabase.auth.resetPasswordForEmail('hello@example.com', {
redirectTo: 'http://example.com/account/update-password',
})
์ด๋ฉ์ผ์ ๊ธฐ๋ฐ์ผ๋ก ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
๊ฐ์ ํ๋ ์ด๋ฉ์ผ์ ์ ๋ ฅํ๊ณ ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ๋ฒํผ์ ๋๋ฅด๋ฉด ์์์ ๋ง๋ค์๋ ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ํ ํ๋ฆฟ ํ์์ผ๋ก ์ด๋ฉ์ผ ์ ์ก์ด ๋๋ค.
๋ฉ์ผ์์ "๋น๋ฐ๋ฒํธ ์ฌ์ค์ " ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋ค์ ์ฐ๋ฆฌ ์ฑ์ ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ํ์ด์ง๋ก ์ด๋ํ๋ค.
(๋น๋ฐ๋ฒํธ์ validation ๊ด๋ จํด์ ํจ์๋ฅผ ๋ง๋ค์ด๋์ ๋งค๋ฒ ํจ์๋ฅผ ์จ์ ์ฒดํฌํ๊ณ ์๋ค.)
๋น๋ฐ๋ฒํธ ์ฌ์ค์ ์ ๊ฒฝ์ฐ ๋ด๊ฐ ์ธ์ฆ์ ๊ดํด ๊ฐ์ด ์์ด์ ๋๋ฌด ๋๋ฌด ํ๋ค์๋ค..
๋น์ฐํ ๋ก๊ทธ์ธ ์ ์ ์ด๋ฃจ์ด์ง๋ ๊ฑฐ๋ผ ์ฌ์ฉ์ ํ ํฐ์ด ํ์ํ๋ค๊ณ ์๊ฐ์ ๋ชปํ๋๋ฐ ์ด๋ฉ์ผ์ ์ธ์ฆํ๋ฉด ์ฌ์ฉ์์ ํ ํฐ์ ๋ฐ๊ฒ๋๊ณ ์ด๋ฅผ ํตํด
์ฑ์ ์ต์๋จ์์ getSession()์ ํตํด ๋ก๊ทธ์ธ์ด ๋์ด๋ฒ๋ ธ๋ค. ๋ก๊ทธ์ธ์ ํ ์ฌ์ฉ์์ ๊ฒฝ์ฐ ๋ฐ๋ก ํ์ผ๋ก ์ด๋ํ๋๋ก ๊ตฌํํด๋ฌ์ ์ด๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํด์ผ ํ ์ง ๊ณ ๋ฏผ์ด ๋๋ฌด ๋ง์๋ค.
๋น๋ฐ๋ฒํธ ์ฌ์ค์ ์ ๊ฒฝ์ฐ ๋ก๊ทธ์ธ ํ์ด์ง์ฒ๋ผ publicํ ํ์ด์ง๋ผ๊ณ ์๊ฐํ๋๋ฐ ์ธ์ฆ์ ํ์ผ๋ ์ธ์ฆ๋ ์ฌ์ฉ์๋ค๋ง ์ด์ฉํ ์ ์๋ ํ์ด์ง์ ๋ฃ์ด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ณ๊ฒฝ ํ์๋ ๋ค์ ์ฌ์ฉ์๊ฐ ์๋ก์ด ๋น๋ฐ๋ฒํธ๋ก ๋ก๊ทธ์ธํ๋ ๊ฒ ์์ฐ์ค๋ฝ์ง ์์๊น ์๊ฐํด์ ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ -> ๋ก๊ทธ์์ ๋ก์ง์ ๋ฃ์ด์ ๋ค์ ๋ก๊ทธ์ธํ๋๋ก ๊ตฌํํ๋ค.
ํ์ ํํด
์ฐ๋ฆฌ๋ ์ปค๋ฎค๋ํฐ ์ฑ์ด๋ผ ์ฌ์ฉ์๊ฐ ํํดํ์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฅผ ์ด๋๊น์ง ์ง์์ผํ ๊ฒ์ธ๊ฐ์ ๋ํ ๊ณ ๋ฏผ์ด ๋ง์๋ค.
์ ์ row๋ฅผ ์์ ์ญ์ ํด๋ฒ๋ฆฌ์๋ ์๊ฒฌ๋ ์์๊ณ ,, ์ ์ ์ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ค์ด ๋ง์ ๊ทธ๊ฑด ๋๋ฌด ์ํํ ๋ฐฉ์์ด๋ผ ์๊ฐํ๋ค.
์ ์ ๋ฅผ ์ง์ฐ๋ฉด ์ ์ ์ ๊ด๊ณ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒ์๊ธ, ๋๊ธ ๋ฑ์์ ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ ์กฐ๊ฑด์ ์ด๊ธ๋๊ฒ ๋ ๊ฒ์ด๋ผ ํ๋จํ์๋ค.
๋ค๋ฅธ ์ฑ๋ค์ ์ด๋ป๊ฒ ๊ตฌํํ์๊น?
์ฐ์ .. ํ์ํํด๋ฅผ ์ฐพ๊ธฐ๊ฐ ๋์ด๋ฌด ์ด๋ ต๋ค..!! ใ ใ ใ ใ
๋ค์ด๋ฒ์ ๊ฒฝ์ฐ ํํดํ๋ ค ํ๋๋ฐ ๊ฒฐ๊ตญ ๋ชป์ฐพ์์ ๊ณ ๊ฐ์ผํฐ์์ ๊ฒ์ํด์ ๋ฐฉ๋ฒ์ ์๊ฒ ๋์๋ค.
๋ด ๋๋ค์ ์ ํ > ๋ด ํ๋กํ ์ ํ > ๋งจ ํ๋จ์ ํ์ํํด ๋ฒํผ ์์ฃผ ์๊ฒ..
์๋ฌดํผ ๋ค์ด๋ฒ์ ๊ฒฝ์ฐ ๊ฒ์ํํ ๊ฒ์๋ฌผ์ ์ ์ง๋๋ ๋ฐฉ์์ผ๋ก ํ์ ํํด๊ฐ ๋๋ค๋ ์๋ด ๋ฌธ๊ตฌ๊ฐ ์์๋ค.
์ด๋ฅผ ์ฐธ๊ณ ํด์ ์ฐ๋ฆฌ ์ฑ๋ ๊ฒ์๋ฌผ์ ์ ์งํ๋ ํ์์ ๊ฐ์ธ ์ ๋ณด๋ฅผ (์ด๋ฉ์ผ) 6๊ฐ์ ๋ด์ ์ญ์ ๋๋๋ก ๊ตฌํํ๋ค.
ํ์์ ๊ฐ์ธ ์ ๋ณด๋ฅผ ๋ฐ๋ก ์ญ์ ํ๋ ๊ฒ์ด ์๋ 6๊ฐ์์ธ ์ด์ ๋ ๋ง์ฝ ์ฌ์ฉ์๊ฐ ๋ถ์ ์ ํ ๊ฒ์๊ธ์ ์ฌ๋ ค ์ ๊ณ ๋ฅผ ๋นํ๋ค๋ฉด ๊ทธ์ ๋ฐ๋ฅธ ์ฌ์ฉ์ ์ ๋ณด๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ 6๊ฐ์ ๋ณด๊ดํ๋ค๋ ๋ชฉ์ ์ด๋ค.
์ด๋ฉ์ผ์ ์ ์ธํ ๊ฐ์ธ ์ ๋ณด์ธ ์์น์ ๊ฒฝ์ฐ ํํดํ๋ฉด ๋ฐ๋ก ์ญ์ ํ๋ค. ์ ์ ์ ๊ณ ์ ์์ด๋๋ฅผ ์ญ์ ํ๋ ๊ฒ ์๋ ๊ฐ์ธ ์ ๋ณด๊ฐ ํฌํจ๋ ์ปฌ๋ผ๋ค์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ ๊ฒ์ผ๋ก ๋ค๋ฅธ ํ ์ด๋ธ์์ ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ ์กฐ๊ฑด์ ์ ์งํ ์ ์๋ค.
์ฌ์ฉ์์ ์ธ์ฆ์ ํฌ๊ฒ ์ด๋ฐ ํ์์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
๊ฐ์ธ ์ ๋ณด๋ฅผ ์ฌ์ฉํ๋๋ก ์ฝ๊ด์ ๋์ํด ์ค ์ฌ์ฉ์๋ค์ ์ํด์ ๊ฐ์ธ ์ ๋ณด๋ฅผ ์์คํ ๋ค๋ค์ผ ํ๊ณ ๋ณด์์ ํนํ ์ ๊ฒฝ์ด ์ฐ์ผ ์ ๋ฐ์ ์๋ ๊ฒ ๊ฐ๋ค. ๊ทธ๋์ ๊ทธ๋ฐ์ง ๊ตฌํ๋ ์ ๋ง ํ๋ค์๋ค...๐ซ
์์ง ๊ฐ์ ํด์ผ ํ ๊ฒ๋ ๋ง๊ณ ๋ณด์ํด์ผ ํ ํญ๋ชฉ๋ค๋ ๋ง๋ค. ๊ทธ๋๋ ์ด์ ์ง์ง ์์ฑ๋ ์๋ ์ฑ์ด ๋ ๊ฒ ๊ฐ์์ ๋ฟ๋ฏํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ํตํด.. ํ์๊ฐ์ ํ ๋ ์ฝ๊ด์ ์ฝ๋ ์ต๊ด์ด ์๊ฒผ๋ค๊ณ ํ๋ค.. (ํ์์ ๊ทธ๋ฅ ์ฒดํฌํ๊ณ ๋์ด๊ฐ์๋๋ฐ ๋ค๋ฅธ ์ฑ๋ค์ ์ฝ๊ด ๋์ ์ด๋ป๊ฒ ์ผ๋? ๊ตฌ๊ฒฝํ๋ ์ฌ๋ฏธ๋ ์๊ณ ใ ใ ์ฌ๋ฐ๋ค)