티스토리 뷰

서론

일반 요청 헤더의 Authorization으로 Token을 사용하는 로그인을 구현하는 방법입니다.

본론

기본 설정

당연하지만 djangorestframewok를 설치해야 합니다.

pip install djangorestframework

settings.py

INSTALLED_APPS에 다음 앱들을 추가해줍시다.

#settings.py
INSTALLED_APPS = [
    ...
    'rest_framework',
    'rest_framework.authtoken',
    ...
]

이제 settings.py 파일 내에 REST_FRAMEWORK 딕셔너리를 만들고 토큰 인증 방법을 추가해 줍니다.

#settings.py
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
    ]
}

DB 마이그레이션

이후 토큰 인증을 위해 데이터베이스를 마이그레이트 해줍니다.

python manage.py makemigrations
python manage.py migrate

인증 요구 뷰 만들기

restframework의 permissions를 이용해 토큰 인증시에만 가능하도록 구현해보겠습니다.
아래는 간단한 ViewSet에 IsAuthenticated 를 부여하여 인증을 요구하도록 하였습니다.

#accounts/serializers.py
from django.contrib.auth import get_user_model
from rest_framework import serializers

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = get_user_model()
        fields = ['id', 'username']
#accounts/views.py
from django.contrib.auth import get_user_model
from accounts.serializers import UserSerializer
from rest_framework import viewsets
from rest_framework.permissions import IsAuthenticated

class UserViewSet(viewsets.ModelViewSet):
    queryset = get_user_model().objects.all()
    serializer_class = UserSerializer
    permission_classes = [IsAuthenticated]

만들어진 viewset은 router를 이용해 쉽게 url에 연결할 수 있습니다. token을 발급받기 위해서 restframewokr에서 기본으로 제공하는 Obtain_auth_token 뷰를 이용합니다.

#urls.py
from django.urls import path, include
from rest_framework import routers
from rest_framework.authtoken import views
from accounts.views import UserViewSet

router = routers.DefaultRouter()
router.register(r'users', UserViewSet)

urlpatterns = [
    path('api/', include(router.urls)),
    path('api/token/, views.obtain_auth_token)
]

결과

http://ORIGIN/api/token 주소로 username과 password를 보내 token을 발급 받습니다.

//request body
{
    username: "your-username"
      password: "your-password"
}

//response body
{
     token: "wkfrkdysothwndgkstkfkagodqhrgoTdjdy" 
}

발급받은 토큰을 Postman이나 curl과 같은 도구를 이용해 headers에 "Authorization: Token wkfrkdysothwndgkstkfkagodqhrgoTdjdy" 같은 형식으로 넣어줍니다.


authorization을 넣지 않았을 때 자격인증 미달이 발생합니다.

토큰 값을 넣으면 정상적으로 확인되는 것을 알수 있습니다.

결론

백엔드 세상은 멀고도 험한 것 같습니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/11   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
글 보관함