Django token decorator

###decorator로 토큰 인증 확인하기

  • 인증 필요한 함수 앞에 @token_required
  • header의 토큰값을 검사함
  • decoding을 통해 검사하며 401 코드로 응답함
  • 아이오닉에서 401 응답코드 받을 시, localstorage 값 모두 삭제
# -*- coding: utf-8 -*-
from rest_framework.response import Response
from rest_framework import status, viewsets
from rest_framework_jwt.settings import api_settings

jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
jwt_decode_handler = api_settings.JWT_DECODE_HANDLER

def token_required(func):
    def inner(request, *args, **kwargs):
        if request.method == 'OPTIONS':
            return func(request, *args, **kwargs)
        auth_header = request.META.get('HTTP_AUTHORIZATION', None)
        if auth_header is not None:
            tokens = auth_header.split(' ')
            if len(tokens) == 2 and tokens[0] == 'Token':
                try:
                    token = tokens[1]
                    decode = jwt_decode_handler(token)
                    print('success')
                    return func(request, *args, **kwargs)
                except:
                    print('token error')
                    return Response(status = status.HTTP_401_UNAUTHORIZED)

        print('no token')
        return Response(status = status.HTTP_401_UNAUTHORIZED)

    return inner
Written on 2016 Jan, 23