티스토리 뷰

https://medium.com/quick-code/token-based-authentication-for-django-rest-framework-44586a9a56fb

 

Token Based Authentication for Django Rest Framework

Django is of the popular web development framework based on python having a large community and is used by many top websites presently. And…

medium.com

: DRF중 Authentication의 방법중 하나인 Token Authentication의 구현 방법에 대해 구글링을 하면, 생각보다 구현하는데 필요한 정보들을 얻는게 어렵다는걸 알게 되었고, 몇시간의 삽질 끝에 내가 구현고자 하는 바와 가장 비슷한 내용을 기술한 글을 보았다, 이는 영어로된 내용이므로, 나는 공부 목적으로 여기서 Token Authentication만 따로 한국어로 해석해서 요약 및 정리하기로 했다 (한마디로, 미러링...)

 

1. settings.py에 다음을 추가

INSTALLED_APPS = [
    ....
    'rest_framework',
    'rest_framework.authtoken'
]
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated', )
}

이러한 설정은 Rest Framework에서 제공되는 기본 인증과, 제한기능을 갖고있는 클래스를 변경해주는 것이다.

 

2. Login 함수와 api 루트 작성

 이제, 우리는 user클래스와 관련되어 있는 token을 반환하는 login 함수를 작성하자, 그리고 같은 이용을 목적으로 api-route를 작성.

 

**아래 코드는 views.py이다

from django.contrib.auth import authenticate
from django.views.decorators.csrf import csrf_exempt
from rest_framework.authtoken.models import Token
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import AllowAny
from rest_framework.status import (
    HTTP_400_BAD_REQUEST,
    HTTP_404_NOT_FOUND,
    HTTP_200_OK
)
from rest_framework.response import Response


@csrf_exempt
@api_view(["POST"])
@permission_classes((AllowAny,))
def login(request):
    username = request.data.get("username")
    password = request.data.get("password")
    if username is None or password is None:
        return Response({'error': 'Please provide both username and password'},
                        status=HTTP_400_BAD_REQUEST)
    user = authenticate(username=username, password=password)
    if not user:
        return Response({'error': 'Invalid Credentials'},
                        status=HTTP_404_NOT_FOUND)
    token, _ = Token.objects.get_or_create(user=user)
    return Response({'token': token.key},
                    status=HTTP_200_OK)

 

위 코드에서 우리는 POST 요청 처리하는 login 함수를 만들었다, 그리고 username과 password를 인자로써 얻고, 그들을 authenticate(인증)하는 함수를 만들었고, 그 인증이 유효하면, 그러면 token 키를 반환한다.

 

**다음 코드는 urls.py이다

from django.contrib import admin
from django.urls import path
from .views import login


urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/login', login)
]

 

**데이터베이스에 적용하기 위해서, 다음 bash 터미널에서 두 코드를 실행하자.

python manage.py makemigrations

python manage.py migrate

 

"" 이제, 우리는 인증과정을 거치면 response로 auth_token을 얻는다, token은 인증된 api를 호출하기 위한 header에서 사용된다.  ""

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
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 31
글 보관함