๐[Django] ์ฌ์ฉ์๊ฐ ๋น๋ฐ๋ฒํธ๋ฅผ ์์ด๋ฒ๋ ธ์ ๋..
์ฌ์ฉ์๊ฐ ๋น๋ฐ๋ฒํธ๋ฅผ ์์ด๋ฒ๋ ธ์ ๋..
์ฌ์ฉ์๊ฐ ์ด๋ฉ์ผ์ ์์ด๋ฒ๋ฆฌ๋ ๊ฒฝ์ฐ๋ ๋๊ฒ ๋ง์.
์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ ์ ์๊ฒ ์ง๋ง, ์๋ ๋ ๋ฐฉ๋ฒ์ด ๋ณดํธ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ์.
- ํจ์ค์๋ ๋ณต์
- ํจ์ค์๋ ์ฌ๋ฐ๊ธ
1. ํจ์ค์๋ ๋ณต์
์ฐ์ , Django ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ด ์ค์ํจ.
Django์ make_password()
๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ์ฅํ ๋, ๋จ๋ฐฉํฅ ํด์ฑ
์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์
๋ ฅ๋ฐ์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณต์ํ๊ธฐ ์ด๋ ค์..
๋จ๋ฐฉํฅ ํด์ฑ
์ ๋จ์ ์ด๋ผ๊ณ ํ ์ ์๊ฒ ์ง๋ง, ๋ฐ๋๋ก ๋ณด์์ ์ธ ์ธก๋ฉด์์๋ ๊ต์ฅํ ์ฅ์ ์ด๋ผ๊ณ ์๊ฐํจ.
2. ํจ์ค์๋ ์ฌ๋ฐ๊ธ
๊ทธ๋ฌ๋ฉด Django์์๋ ํจ์ค์๋๋ฅผ ์ฌ๋ฐ๊ธํ๋ ๋ฐฉ๋ฒ์ ์ฑํํด์ผํจ.
๋ณดํต ๋น๋ฐ๋ฒํธ๋ฅผ ์ด๋ป๊ฒ ์ฐพ์๊น?
-
๋ก๊ทธ์ธ โ ๋น๋ฐ๋ฒํธ ๊น๋จน์ โ ๋ก๊ทธ์ธ ์คํจ โ โ๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐโ โ โ์ด๋ฆโ, โemailโ ๋ฑ๊ณผ ๊ฐ์ด 2๊ฐ ์ด์์ ๊ฐ์ ์ ๋ ฅ ๋ฐ์ ์ ์ ์ธ์ฆ โ ์ธ์ฆ๋๋ฉด ์๋ก์ด ๋น๋ฐ๋ฒํธ ์ ๋ ฅ ํ๋ฉด์ผ๋ก ์ด๋ โ ์ ๋น๋ฐ๋ฒํธ ์ ๋ ฅ(์ ๋ ฅ, ํ์ธ์ ๋ ฅ) โ ๋น๋ฐ๋ฒํธ ์์ฑ (๊ธฐ์กด DB๊ฐ์ ์ด๊ฑธ๋ก ๊ฐฑ์ )
์ด๋ฉ์ผ ์ธ์ฆ๋ง ์ ์ฉํด์ผ๋ ๋ฏ
-
๋ก๊ทธ์ธ โ ๋น๋ฐ๋ฒํธ ๊น๋จน์ โ ๋ก๊ทธ์ธ ์คํจ โ โ๋น๋ฐ๋ฒํธ ์ฌ๋ฐ๊ธโ โ โ์ด๋ฆโ, โemailโ ๋ฑ๊ณผ ๊ฐ์ด 2๊ฐ ์ด์์ ๊ฐ์ ์ ๋ ฅ ๋ฐ์ ์ ์ ์ธ์ฆ โ ์ธ์ฆ๋๋ฉด ์ด๋ฉ์ผ๋ก ์๋ก์ด ๋น๋ฐ๋ฒํธ ์์ฑํด์ ์ ์ก โ DB๋ ํด๋น ๋น๋ฐ๋ฒํธ๋ก ๊ฐฑ์ โ ์ฌ์ฉ์ ๋ค์ ๋ก๊ทธ์ธ โ ๋ง์ดํ์ด์ง ๊ฐ์ โ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝโ โ ๋ณ๊ฒฝ ์๋ฃํ๋ฉด DB์์ ๋ค์ ์๋ก์ด ๋น๋ฐ๋ฒํธ๋ก ๊ฐฑ์
์์ ๊ฐ์ด ๋ ๊ฐ์ ํ๋ฆ์ผ๋ก ๋ณผ ์ ์์ ๋ฏ?
1๋ฒ์ DB ์์ ์ด 1๋ฒ, 2๋ฒ์ DB ์์ ์ด 2๋ฒ์.
1๋ฒ์ ์ฅ์
- DB ์์ ์ด ์ ์ (1๋ฒ)
- ์๋ฒ์์ ์๋ก์ด ๋น๋ฐ๋ฒํธ ์์ฑ ํ์ ์์
2๋ฒ์ ์ฅ์
- ์๋ก์ด ๋น๋ฐ๋ฒํธ๋ฅผ ์ด๋ฉ์ผ๋ก ์ ์กํ๋ฏ๋ก ์ฌ์ฉ์ ํ์ธ 2๋ฒ? (์ฌ์ค์ ํ์์์)
- ๊ฐ์ธ์ ๋ณด์์ ์์ โ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝโ ๊ธฐ๋ฅ๊ณผ ์ ์ฌํ๋ฏ๋ก, ์ฝ๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ
1๋ฒ์ด ์ข์ง ์์๊น ์ถ์..
Django์์๋ ์ด๋ฐ ๊ธฐ๋ฅ ์๋?
๋น๋ฐ๋ฒํธ ์ฌ์ค์ ํ๋ก์ธ์ค๋ฅผ ์ ๊ณตํ๊ณ ์์.
1. ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ํ ํฐ ์์ฑ
- Django์ ๊ธฐ๋ณธ
auth
์ฑ์์ ์ ๊ณตํ๋ ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ๊ธฐ๋ฅ์ ์ฌ์ฉํจ PasswordResetView
๋ฐPasswordResetConfirmView
๋ฅผ ํ์ฉํ๋ฉด ์ฌ์ฉ์๊ฐ ์ด๋ฉ์ผ์ ํตํด ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ค์ ํ ์ ์์
from django.contrib.auth.views import PasswordResetView
urlpatterns = [
path('password_reset/', PasswordResetView.as_view(), name='password_reset'),
]
2. ์ฌ์ค์ ๋งํฌ๋ฅผ ์ด๋ฉ์ผ๋ก ์ ์ก
send_mail()
์ ์ฌ์ฉํ๋ฉด ๋จ
3. ๊ด๋ฆฌ์๋ง ๋น๋ฐ๋ฒํธ ์ด๊ธฐํ
- ๊ด๋ฆฌ์๊ฐ ์ฌ์ฉ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ง์ ์ด๊ธฐํ
from django.contrib.auth.models import User
user = User.objects.get(username="example_user")
user.set_password("new_password")
user.save()
API ๊ตฌ์ํ๊ธฐ
1๋ฒ ๋ฐฉ์์ผ๋ก ์งํํ์.
์ด๋ฉ์ผ ์ธ์ฆ๋ง ์ฌ์ฉํด์!
1. [POST] api/send-password-reset-mail
- request
{
"email": "AAA@BBB.com"
}
์ด๋ฉ์ผ ๋ณธ๋ฌธ์ ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ ํ๋ฉด ๋งํฌ๋ฅผ ์ฒจ๋ถ
- response
{
"status": "True", // or "False",
"uuid": "{UUID}",
"http_status": "200_OK" // or "404_NOT_FOUND"
}
2. [POST] api/get-new-password/{uuid}
- request
{
"email": "AAA@BBB.com",
"password": "{PASSWORD}",
"uuid": "{UUID}"
}
๋น๋ฐ๋ฒํธ๋ ํ๋ก ํธ์์ ์ ๋ ฅ ๋ฐ ํ์ธ ์งํ
{
"status": "True", // or "False"
"http_status": "200_OK" // or "400_BAD_REQUEST"
}
๋๊ธ๋จ๊ธฐ๊ธฐ