utils.py
일부class LoginConfirm:
def __init__(self, original_function):
self.original_function = original_function
def __call__(self, request, *args, **kwargs):
token = request.headers.get("Authorization", None)
try:
if token:
token_payload = jwt.decode(token, SECRET, algorithms='HS256')
user = User.objects.get(id=token_payload['user_id'])
request.user = user
return self.original_function(self, request, *args, **kwargs)
return JsonResponse({'MESSAGE': 'NEED_LOGIN'}, status=401)
except jwt.ExpiredSignatureError:
return JsonResponse({'MESSAGE': 'EXPIRED_TOKEN'}, status=401)
except jwt.DecodeError:
return JsonResponse({'MESSAGE': 'INVALID_USER_ERROR'}, status=401)
except User.DoesNotExist:
return JsonResponse({'MESSAGE': 'INVALID_USER_ERROR'}, status=401)
utils.py
일부def login_confirm(original_function):
def wrapper(self, request):
try:
token = request.headers.get("Authorization", None)
if token:
token_payload = jwt.decode(token, SECRET, algorithms='HS256')
user = User.objects.get(id=token_payload['user_id'])
request.user = user
return original_function(self, request)
return JsonResponse({'MESSAGE': 'NEED_LOGIN'}, status=401)
except jwt.ExpiredSignatureError:
return JsonResponse({'MESSAGE': 'EXPIRED_TOKEN'}, status=401)
except jwt.DecodeError:
return JsonResponse({'MESSAGE': 'INVALID_USER_ERROR'}, status=401)
except User.DoesNotExist:
return JsonResponse({'MESSAGE': 'INVALID_USER_ERROR'}, status=401)
return wrapper
JWT 적용
token = request.headers.get("Authorization", None) if token: token_payload = jwt.decode(token, SECRET, algorithms='HS256') user = User.objects.get(id=token_payload['user_id']) request.user = user return self.original_function(self, request, *args, **kwargs)
views.py
일부class PostingView(View):
@LoginConfirm
def post(self, request):
data = json.loads(request.body)
try:
Posting.objects.create(
user = request.user,
img_url = data['img_url']
)
return JsonResponse({'MESSAGE': 'POSTING_SUCCESS'}, status=201)
except KeyError:
return JsonResponse({'MESSAGE': 'KEY_ERROR'}, status=400)
except:
return JsonResponse({'MESSAGE': 'INVALID_USER_ERROR'}, status=401)
JWT 적용
@LoginConfirm
views.py
일부class CommentView(View):
@LoginConfirm
def post(self, request):
data = json.loads(request.body)
try:
if not User.objects.filter(email=data['user']).exists():
return JsonResponse({'MESSAGE': 'INVALID_USER_ERROR'}, status=401)
if not Posting.objects.filter(id=data['posting']).exists():
return JsonResponse({'MESSAGE': 'DOES_NOT_EXIST_ERROR'}, status=401)
Comment.objects.create(
user = request.user,
posting = Posting.objects.get(id=data['posting']),
contents = data['contents']
)
return JsonResponse({'MESSAGE': 'COMMENT_SUCCESS'}, status=201)
except KeyError:
return JsonResponse({'MESSAGE': 'KEY_ERROR'}, status=400)
JWT 적용
@LoginConfirm