[TIL] Login_decorator (로그인 데코레이터)
로그인 데코레이터
어떠한 페이지를 이용할 때, 사용자가 회원인지, 비회원인지를 판단하여 컨텐츠를 이용할 수 있도록 해야한다. HTTP의 성질 중에 상태를 저장 안한다.라는 성질 때문에, 우리는 어떠한 컨텐츠를 사용할 때 항상 사용자가 로그인이 이미 되어 있는지, 아닌지를 판단해야 한다. 그렇기에 우리는 데코레이터를 이용하여서, 어떠한 사용자가 회원만 가능한 컨텐츠를 이용할 때 이를 쉽게 판단해 볼 것이다.
a = {'user_id'}일때
bcrypt.hashpw 한번 하면;
a = 'hasdbflh2h1;2ioj;12ij;1i3rh;jfsk',
encode 한번 더 하면;
a = b'hasdbflh2h1;2ioj;12ij;1i3rh;jfsk',
decode 하면;
a = 'hasdbflh2h1;2ioj;12ij;1i3rh;jfsk',
jwt.decode 하면;
a = {'user_id'}
decorator.py FORMAT
import json
from django.http import JsonResponse
from .models import Account
from test01.settings import SECRET_KEY
def token_check(func):
def wrapper(self, request, *args, **kwargs):
if "Authorization" not in request.headers: #header에 토큰값 확인
return JsonResponse({'Error_code':'Invalid_login'}, status=401)
encode_token = request.headers["Authorization"] #header의 토큰값 입력
try:
data = jwt.decode(encode_token, SECRET_KEY, algorithm='HS256') #encode할 때 썻던 id값을 추출하기위해 데이터 decode하기.
user = User.objects.get(id = data['id']) #id를 통해 user의 정보를 user에 담아준다.
request.user = user #**get을 통해 가져온 user의 정보를 request.user에 담아준다. 이는 후에 decorator를 붙혀줄 views에 사용된다.**
except jwt.DecodeError:
return JsonResponse({'Error_code':'Invalid_token'}, status=401)
except User.DoesNotExist:
return JsonResponse({'Error_code':'Unknown_user'}, status=401)
return func(self, request, *args, **kwargs) #리턴되는 request의 값은 user정보를 담은 request가 됨. 즉 위에 'request.user'
return wrapper
Author And Source
이 문제에 관하여([TIL] Login_decorator (로그인 데코레이터)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kimsj5259/TIL-데코레이터Logindecorator저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)