250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- CORS
- typescript
- TypeError: this.boardRepository.createBoard is not a function
- 노드
- crud2
- django westagram
- 자바스크립트
- javascript
- 프로미스
- 스코프
- Django
- docker
- node
- async/await
- OSI7계층
- nodeJS
- status code
- 실행 컨텍스트
- Jest
- bcrypt
- on_delete
- rebase
- westagram
- pm2
- 장고초기세팅
- manytomanyfield
- wecode
- JWT
- 호이스팅
- 트랜잭션
Archives
- Today
- Total
될때까지
((WnB)) 6일차 : 로그인 데코레이터 포스트맨으로 테스트하기 본문
728x90
이제 로그인 데코레이터를 구현할 차례다. 코드는 지난 위스타그램 스터디때 작성했던 코드를 참고해서 작성했다.
import jwt
from functools import wraps
from django.conf import settings
from django.http import JsonResponse
from users.models import User
def signin_decorator(func):
@wraps(func)
def wrapper(self, request, *args, **kwargs):
try:
if 'Authorization' not in request.headers:
return JsonResponse({'message':'KEY_ERROR'}, status=400)
token = request.headers.get('Authorization')
payload = jwt.decode(token, settings.SECRET_KEY, settings.ALGORITHM)
user = User.objects.get(id = payload['id'])
request.user = user
return func(self, request, *args, **kwargs)
except User.DoesNotExist:
return JsonResponse({'message':'INVALID_USER'}, status=400)
except jwt.exceptions.DecodeError:
return JsonResponse({'message':'INVALID_TOKEN'}, status=400)
return wrapper
토큰의 경우 3가지 에러가 발생할 수 있고, 이를 고려해서 로직을 작성했다.
- Authorization = 토큰 이 담겨져 오는 데 Authorization이 없는 경우 => KEY_ERROR
- User가 존재하지 않는 경우 => INVALID_USER
- 우리가 생성한 토큰이 아닌 경우(토큰이 이상한 경우) => INVALID_TOKEN
작성한 데코레이터 기능을 테스트해보고 싶었다. 그래서 users.views에 TestView를 만들었다.
# users > urls.py
from django.urls import path
from users.views import TestView
urlpatterns = [
path('/test', TestView.as_view()),
]
# users > views.py
class TestView(View):
@signin_decorator
def get(self, request):
return JsonResponse({'message':'test'}, status=200)
만든 데코레이터를 포스트맨을 사용해서 테스트해보자.
Authorization탭에서 Type을 Inherit auth from parent로 선택한다.
Headers탭으로 이동해서 KEY에는 Authorization을 입력하고 VALUE에는 토큰을 복붙한다. 그러면 이제 테스트를 할 수 있다.
이제 다음은 테스트 코든가......
728x90
'프로젝트 > wecode2차 : WnB' 카테고리의 다른 글
((WnB)) 7일차 : 테스트 코드 작성 (0) | 2022.08.07 |
---|---|
((WnB)) 6일차 : 사용자 추가 정보 입력받기 (0) | 2022.08.06 |
((WnB)) 5일차 : Kakao Social API 포스트맨 테스트 (0) | 2022.08.05 |
((WnB)) 4일차 : Kakao Social API (0) | 2022.08.04 |
((WnB)) 3일차 : 모델링 수정 및 CSV 작업 (0) | 2022.08.04 |