KEY_ERROR
를 반환한다.INVALID_USER
를 반환한다.SUCCESS
를 반환한다.전에 블로깅한 views.py
에 이어서 작업 (같은 user app
)
class SignInView(View):
def post(self, request):
try:
data = json.loads(request.body)
user = User.objects.get(email = data['email'])
except KeyError:
return JsonResponse({'message' : 'KEY_ERROR'}, status=400)
except User.DoesNotExist:
return JsonResponse({'message' : 'INVALID_USER'}, status=401)
Json body
에 data 가져와주고~
get method
로 로그인 시도하는 user
의 정보를 DB
에 저장 된 email
과 대조해줌
user의 정보가 없거나, key
를 잘못 입력했을 때의 ERROR를 예외처리로 핸들링
if not bcrypt.checkpw(data['password'].encode('utf-8'), user.password.encode('utf-8')):
return JsonResponse({'message' : 'INVALID_USER'}, status=400)
token = jwt.encode({ 'password' : data['password'] }, SECRET_KEY, algorithm='HS256')
return JsonResponse({'message' : 'WOW!!!!SUCCESS!!!!', 'access_token' : token.decode('utf-8')}, status=200)
@decorator
사용 전 구현했던 access_token
인코딩 된 패스워드와 저장된 패스워드가 동일하지 않으면 INVALID_USER
반환,
token에 유저 정보와 시크릿키, 적용할 알고리즘 발행 후 SUCCESS
반환~~~!~!
이번에 사용할 decorator 친구는 user 토큰에 관련 된 아이기 때문에 user app에 utils.py 생성!
import jwt, json
from django.http import JsonResponse
from my_settings import SECRET_KEY, ALGORITHM
from user.models import User
def TokenCheck(func):
def wrapper(self, request, *args, **kwargs):
try:
access_token = request.headers.get('Authoriation')
payload = jwt.decode(access_token, SECRET_KEY, algorithms=ALGORITHM)
user = User.objects.get(id = payload['id'])
request.user = user
except User.DoesNotExist:
return JsonResponse({'message':'INVALID_USER'}, status=400)
return func(self, request, *args, **kwargs)
return wrapper
user의 로그인 권한이 포함 된 페이지
(마이페이지, 장바구니) 등등에 붙여 줄 decorator
! 어떤 식의 인자를 받을지 알 수 없으므로
가변인자와 키워드 가변인자를 포함해준다.
Token Check
에 필요한 아이들
jwt
, SECRET_KEY
, ALGORITHM
, User
import
해줌 나머지는 위 코드와 동일
from django.urls import path
from .views import SignUpView, SignInView
urlpatterns = [
path('/signup', SignUpView.as_view()),
path('/signin', SignInView.as_view())
]
from django.urls import path, include
urlpatterns = [
path('user', include('user.urls')),
]
싸랑행 내 코드