Rest Framework 인증
이번에는 Rest Framework 을 이용한 인증처리를 구현해 보겠습니다.
(본 강의는 http://www.django-rest-framework.org 의 튜토리얼을 기반으로 작성되었습니다. 좀 더 자세한 내용을 원하시면 해당 사이트의 API를 참조하시기 바랍니다.)
가.pjt_auth 프로젝트 생성
1.프로젝트 생성
먼저 pjt_auth 프로젝트를 생성하고 serializer 와 view 를 설정합니다.
- django-admin startproject pjt_auth
2.앱생성
인증관련 모듈을 독립적으로 운용하기 위해서 생성된 프로젝트 디렉토리로 이동후 user 앱을 생성해줍니다
- cd pjt_auth
- python manage.py startapp user
3.settings.py설정
프로젝트디렉토리의 settings.py 파일을 열고 아래와 같이 추가해 줍니다.
- 프로젝트디렉토리/pjt_auth/settings.py
INSTALLED_APPS = [
...
'rest_framework', # 추가
]
# 인증 클래스 추가 - 인증된 사용자만 접근가능
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
)
}
4.모델생성
user 관련 모델은 django 프레임웍에 이미 정의되어 있기 때문에 따로 생성하지 않습니다. 따라서 기본 테이블만 migrate 로 생성합니다.
- python manage.py migrate
5.super user 생성
아래 명령어로 관리자를 생성하고 관리자 아이디와 비밀번호, 이메일을 설정해줍니다.
- python manage.py createsuperuser
나.개발
1.serializer 생성
- 프로젝트디렉토리/user/serializers.py
from django.contrib.auth.models import User, Group
from rest_framework import serializers
# 사용자 목록
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('url', 'username', 'email', 'groups')
# 사용자 그룹
class GroupSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Group
fields = ('url', 'name')
2.view 생성
- 프로젝트디렉토리/user/views.py
from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from user.serializers import UserSerializer, GroupSerializer
# 사용자 목록을 화면에 뿌려주는 ViewSet
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
# 그룹목록을 화면에 뿌려주는 ViewSet
class GroupViewSet(viewsets.ModelViewSet):
queryset = Group.objects.all()
serializer_class = GroupSerializer
3.url 설정
- 프로젝트디렉토리/pjt_auth/urls.py
from django.conf.urls import url, include
from rest_framework import routers
from user import views
router = routers.DefaultRouter()
router.register(r'user', views.UserViewSet)
router.register(r'group', views.GroupViewSet)
urlpatterns = [
# 사용자, 그룹목록 처리를 위한 url - 위의 router에서 처리되어 있다
url(r'^', include(router.urls)),
# 인증처리를 위한 url
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
다.로그인테스트
Rest Framework 에서는 다양한 인증방식을 지원하는데 이번예제는 Basic Auth를 사용해서 인증처리를 진행합니다. 인증값을 전달하기 위해서 포스트맨을 실행한후 다음과 같이 설정해줍니다.
method GET
Authorization Type 을 Basic Auth 로변경하면 사용자아이디와 비밀번호를 입력하는 필드가 나타납니다.
username = 관리자아이디
password = 관리자비밀번호Headers 자동설정됨
설정완료 후 send 버튼을 클릭하면 아래와 같은 결과화면이 나타납니다.
하지만 인증정보 없이 브라우저에서 직접 user 리소스를 요청하면 아래와 같이 인증되지 않았다는 메시지가 출력된다.