[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
            
         

좋은 웹페이지 즐겨찾기