본문 바로가기
BE/Python & Django REST API

[Django REST API] 11. Create login API

by 건빵거늬 2021. 12. 24.
1. Create login API viewset
2. Set token header using ModHeader extension

1. Create login API viewset

(1) 구현

# views.py

...
# ObtainAuthToken: AuthToken을 만드는 view
from rest_framework.authtoken.views import ObtainAuthToken
from rest_framework.settings import api_settings
...


class UserLoginApiView(ObtainAuthToken):
    """Handle creating user authentication tokens"""
    # 일반적으로 제공되는 상속용 view들은
    # renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES 을 기본적으로 가지고 있다
    # 이것은 해당 기능이 django admin 페이지에 나타나도록 해주는데
    # ObtainAuthToken은 이 코드가 없다. 따라서
    # 직접 코드를 적어줌으로써 django admin 페이지에 나타나게 해준다.
    renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES
# urls.py

...
from django.urls import path
...


urlpatterns = [
    ...
    path('login/', views.UserLoginApiView.as_view()),
    ...
]

(2) 테스트

1. 로그인을 하면
2. 토큰이 생성된다

2. Set token header using ModHeader extension

(1) modheader extension으로 header에 token 붙이기

(2) authenticated가 안 되었을 때 접근 불가능했던 것 다시 확인해보기

realworld 프로그램에서는 이렇게 mod header chrome extension을 사용하지 않지. 클라이언트에 직접 token을 전달해서 이용할 수 있게 해야한다. 예를 들어 JS는 fetch library, Python은 request library을 사용한다.

댓글