본문 바로가기
AI 웹개발반/Python, Django

[django] request header 내용 확인하기

by 째깍단 2024. 2. 5.

 

 

헤더에 담긴 유저 정보를 인식해 사용자를 인식하여 동적으로 정보를 보여주기 위해서는 헤더에 담긴 JWT를 이용하여 정보를 추출해낼 수 있어야한다.

 

실제 어플리케이션에서 유저 맞춤형으로 정보를 제공하기 위해 사용하는 방법은 유저의 리소스를 api body에 담아 보내는 것보다, jwt에서 유저 정보를 추출, 사용하는 것이 일반적이라고 한다.

 

 

djangorestframework-simpleJWT 라이브러리가 생성해준 JWT를 백엔드 리소스 단에서 추출하여 사용자 정보를 인식하고 사용자 맞춤형 정보를 제공해보고자 header 내용을 확인하는 방법을 알아보았다

 

 

 

 


 

 

 

 

token에 담겨오는 유저 정보를 확인하기 위해 jwt resolver 사이트를 이용했다.

https://jwt.io/

 

Postman에서 발급한 access token 해석하자 user_id, login_id 담겨있는 것을 확인할 있었다.

 

payload 부분에 담긴 유저 정보

 

 

프로젝트에 헤더 전체를 꺼내는 코드를 작성한다.

 

 

 

찾아본 블로그들에는 header를 가져오는 방법이 아래와 같이 정리되어있었는데,

코드에 작성해 api를 호출해보니 AttributeError가 발생했다. 

 

 

``` 찾은 내용들

requset.Meta.get(HTTP_USER_INDEX)

 

헤더를 가져올 때는 앞에 HTTP_ 을 붙이고 헤더값은 모두 대문자, 하이픈이 있다면 언더바 _ 형태로 변환하면 잘 가져와 진다. 

사용자가 헤더에 ‘my_header’를 보내주면 django에서는 ‘HTTP_MYHEADER’로 읽어와 사용하면 된다.

 

my_header 처럼 _ 언더바를 추가하여 헤더로 보내주면 XSS공격을 막기 위한 정책으로 언더바가 삭제되어 전송된다. 

 따라서 _ 언더바대신 - 하이픈을 이용해 header를 전송하는 것이 올바르다.

 

header를 꺼내기 위해 아래와 같이 사용할 수 있다.

request.META['HTTP_MY_HEADER']

request.META.get['HTTP_MY_HEADER'] 

```

 

 

 

 

 

 

 

 

 

 

다시 구글링 중에 django 2.2부터 request.headers 로 헤더를 가져올 수 있음을 알게되었다.

 

 

모든 헤더를 얻으려면 

request.headers.keys()  혹은 request.headers.items() 을 사용하면 된다.

 

print(request.headers) 아래와 같은 내용을 개발자에게 출력해준다

 

 

 

 

 

 

 

참고 : https://stackoverflow.com/questions/3889769/how-can-i-get-all-the-request-headers-in-django?rq=3