์์ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ์ถํ์ ์ฝ๊ฒ ์ถ๊ฐํ๊ธฐ ์ํด์ dj-rest-auth๋ฅผ ์ฌ์ฉํด ํ์๊ฐ์ , ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ตฌํํด๋ณด๋๋ก ํ์.
์ฌ์ค ์๋๋ simple jwt๋ฅผ ํ์ฉํด์ ํ ํฐ์ ๋ฐ๊ธํ๊ณ ์ฟ ํค์ ์ ์ฅํด๋๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ ค๊ณ ํ๋๋ฐ, ์ด๊ฒ์ ๊ฒ ์ฐพ์๋ณด๋ ์์ ๋ก๊ทธ์ธ ๊ตฌํ ์์ ์ ์ ๊ฑด๊ฐ์ ์๋นํ ์ํ์ ์ธ ์ค์ผ์ผ๋ก ์ผ์ด ์ปค์ง ์ ์๋ค๋ ์ฌํ์์์... dj-rest-auth๋ฅผ ํจ๊ป ์ฌ์ฉํ๋๋ก ํ๋ค.
https://dj-rest-auth.readthedocs.io/en/latest/index.html
Welcome to dj-rest-authโs documentation! โ dj-rest-auth 5.0.1 documentation
Note dj-rest-auth version 1.0.0 now uses Django Simple JWT.
dj-rest-auth.readthedocs.io
Install
pip install django-rest-auth
pip install django-allauth
Settings.py
๋ค์ ์ฝ๋๋ค์ settings.py์ ์ถ๊ฐํ๋ค.
INSTALLED_APPS = (
'django.contrib.sites',
'rest_framework',
'rest_framework.authtoken',
'dj_rest_auth'
'dj_rest_auth.registration',
'allauth',
'allauth.account',
'allauth.socialaccount',
)
REST_FRAMEWORK = {
...
'DEFAULT_AUTHENTICATION_CLASSES': [
'dj_rest_auth.jwt_auth.JWTCookieAuthentication',
"rest_framework.authentication.SessionAuthentication",
...
],
}
REST_AUTH = {
'USE_JWT': True,
'JWT_AUTH_COOKIE': 'my-app-auth',
# want refresh token
'JWT_AUTH_REFRESH_COOKIE': 'my-refresh-token',
# set refresh token http only (security essue)
'JWT_AUTH_HTTPONLY': False,
# JWT ์ฟ ํค csrf ๊ฒ์ฌ
'JWT_AUTH_COOKIE_USE_CSRF' : True,
# set Session login false : if true, sessionid remains in cookie info
'SESSION_LOGIN' : False
}
JWT_AUTH_REFRESH_COOKIE๋ฅผ ์ค์ ํ์ง ์์ผ๋ฉด refresh_token์ ์๋ต๋ฐ์ง ๋ชปํ๋ค. (๋ก๊ทธ์ธ ์ refresh_token์ด ๋น์นธ์ผ๋ก ๋์จ๋ค.)
JWT_AUTH_HTTPONLY๋ ๊ธฐ๋ณธ์ผ๋ก true๋ก ์ค์ ๋์ด์๋ค. ๋ฐ๋ผ์ ์ด ๋ถ๋ถ์ false๋ก ๋ฐ๊ฟ์ค์ผ access์ refesh token์ ๋ชจ๋ ์๋ต๋ฐช์ ์ ์๋ค.
๋ฌธ์ ๋, ๋ณด์์ ์ด์๊ฐ ํฌ๊ธฐ ๋๋ฌธ์ refresh token์ csrf๊ฒ์ฌ๋ฅผ ํ๋๋ก ์ค์ ํ๊ณ , ์ฟ ํค์๋ ์ ์ฅ๋์ง ์๊ฒ ํด์ผ ํ๋ค.
๋ฐ๋ผ์ SESSION_LOGIN ์ false๋ก, JWT_AUTH_COOKIE_USE_CSRF๋ true๋ก ์ค์ ํ๋ค.
JWT_AUTH = {
'JWT_ALLOW_REFRESH': True,
# JWT ํ ํฐ์ ์ ํจ๊ธฐ๊ฐ ์ค์
'JWT_EXPIRATION_DELTA': datetime.timedelta(days=7),
# JWT ํ ํฐ ๊ฐฑ์ ์ ์ ํจ๊ธฐ๊ฐ
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=28),
}
Urls.py
ํ๋ก์ ํธ ํด๋(settings๊ฐ ์๋)์ urls.py์ ๋ค์์ ์ถ๊ฐํ๋ค.
urlpatterns = [
...
path('dj-rest-auth/', include('dj_rest_auth.urls')),
path('dj-rest-auth/registration/', include('dj_rest_auth.registration.urls')),
]
Migrate
settings์ INSTALLED_APPS๋ฅผ ์์ ํ๊ธฐ ๋๋ฌธ์ migration์ ์งํํด์ผ ํ๋ค.
python manage.py migrate
๋์ ํ์ธ
runserver๋ก ๋์์ด ์ ์์ ์ผ๋ก ์งํ๋๋์ง ์์๋ณด์
python manage.py runserver
์ด์ /dj-rest-auth/๋ก ๋ค์ด๊ฐ๋ณด์.

8๋ฒ๋ถํฐ 16๋ฒ๊น์ง์ URL์ด ์ ๋จ๋ฉด ์ผ๋จ ์ฑ๊ณต์ด๋ค!
.
dj-rest-auth/registration/

POST๋ฅผ ๋๋ฅด๋ฉด ์ฑ๊ณต์ ์ผ๋ก ํ์๊ฐ์ ์ด ์๋ฃ๋๋ค.
ํ์๊ฐ์ ์ด ์๋ฃ๋๋ฉด access token๊ณผ refresh token์ด ์ ๋จ๋๊ฑธ ์ ์ ์๋ค.

dj-rest-auth/login/
์ด์ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ํ์ธํ์

์ ์ ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ค. POST๋ฅผ ๋๋ฌ๋ณด๋ฉด ์๋์ ๊ฐ์ด ์ฑ๊ณต์ ์ผ๋ก ๋ก๊ทธ์ธ ๋๋ค.

dj-rest-auth/user/
๋ก๊ทธ์ธ๋ ์ ์ ์ ์ ๋ณด๋ฅผ ํ์ธํด๋ณด์ 127.0.0.1:8000/dj-rest-auth/user/ ๋ก ์ ๊ทผ์ ํ๋ฉด ์ ์ ์ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋ค.

dj-rest-auth/logout/
์ด์ ๋ก๊ทธ์์ํด๋ณด์.

์๋์ POST๋ฅผ ๋๋ฌ๋ณด๋ฉด

๋ก๊ทธ์์๋์๋ค!
'๐ฅProject > Team22' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Team 22] DRF - Mixins (0) | 2024.02.08 |
---|---|
[Team 22] DRF - Generic API View (0) | 2024.02.08 |
[Team 22] Django REST framework (3) - Viewset (0) | 2024.02.03 |
[Team 22] Django REST Framework (2) - Serializers (0) | 2024.02.03 |
[Team 22] Django REST Framework(1) (0) | 2024.02.03 |