YEOJIN-DEV

TIL - 180803

August 03, 2018 | 1 Minute Read

8월 3일 TIL : 배민찬 카피 프로젝트, 패스트캠퍼스 보강

Token Authentication

settings.py 설정 추가 필요하다.

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.TokenAuthentication',
    )
}

유저가 로그인에 성공하면 토큰을 생성해주고 응답을 생성해주면 된다.

from rest_framework.authtoken.models import Token

class AuthToken(APIView):
    def post(self, request):
        # 전달받은 데이터에서 username, password추출
        username = request.data.get('username')
        password = request.data.get('password')
         # authenticate실행
        user = authenticate(username=username, password=password)
         # authenticate가 성공한 경우
        if user:
            # Token을 가져오거나 없으면 생성
            token, __ = Token.objects.get_or_create(user=user)
            # Response에 돌려줄 데이터
            data = {
                'token': token.key,
            }
            return Response(data)
        # authenticate에 실패한 경우
        raise AuthenticationFailed('인증정보가 올바르지 않습니다')

토큰 인증은 기존 Django 인증 방식과 같다.

class AuthenticationTest(APIView):
    # URL: /api/users/auth-test/
    def get(self, request):
        # request.user가 인증 된 상태일 경우, UserSerializer를 사용해 렌더링한 데이터를 보내줌
        # 인증되지 않았을 경우 NotAuthenticated Exception을 raise
        if request.user.is_authenticated:
            return Response(UserSerializer(request.user).data)
        raise NotAuthenticated('로그인 되어있지 않습니다')