본문 바로가기
카테고리 없음

[Django/장고]api의 응답(response)를 전달받을때 에러 발생 (response error)'WSGIRequest' object has no attribute 'get' -solved

by Mr.noobiest 2024. 6. 19.

 

카x오 로그인 API사용중에 에러 발생

에러 발생


카x오에서 제공하는 API를 사용해 간단한 로그인 작업을 만들고 있었다.

1) 앱 등록 ()
2) Rest API ()
3) 로그인 API사용설정 ()
4) Secret Key 발급 <-필수는 아니지만 일단 할당 ()

필요한 사항은 모두 체크하였고, 이제 코드를 작성해보자.

settings.py에 아래와 같이 노출되어서는 안되는 내용들을 저장해두었다.

KAKAO_REST_API_KEY = '내 앱 -> 앱 키 -> Rest API Key'
KAKAO_REDIRECT_URI = '카x카오 로그인  == 인가 코드를 던져줄 URL '
KAKAO_CLIENT_SECRET = '카x오 로그인 -> 보안' == 필수는 아니다.

 


 

Django Views.py / urls.py

 

프로젝트 폴더/앱 이름 폴더/views/main_view.py

def index(request):
    return render(request, '앱 이름/index.html')

def kakao_login(request):
    # Kakao 로그인 URL 생성
    kakao_login_url = f'https://kauth.kakao.com/oauth/authorize?client_id={settings.KAKAO_REST_API_KEY}&redirect_uri={settings.KAKAO_REDIRECT_URI}&response_type=code'
    return redirect(kakao_login_url)

 


 

프로젝트 폴더/앱 이름 폴더/urls.py

from django.urls import path
from 앱 이름'.views import main_view


app_name='앱 이름'

urlpatterns = [
    path('index', main_view.index, name='index'),
    path('kakao_login', main_view.kakao_login, name='kakao_login'),
    path('save_token', main_view.save_token, name='save_token'),


]



 


 

'WSGIRequest' object has no attribute 'get' 


이게 뭔가 싶었다, 크롬 > 개발자 도구로 보니, Token을 발급 받기 위한 인가코드는 정상적을 받았는데, 저런 에러가 발생하였다.

코드가 왔는데,,, 안왔습니다.

 

아이... 이게 뭐여

이는 Django에서 제공하는 클릭 재킹(Clickjacking) 공격을 방지하기 위한 기본 기능이다.

 

클릭 재킹의 정의는 아래와 같다.

 

  • 클릭 재킹은 사용자가 클릭하고자 하는 대상과 실제 클릭되는 대상이 다른 상황을 만들어내는 공격 기법입니다. 
  • 사용자가 의도하지 않은 버튼이나 링크를 클릭하게 만들어 악의적인 행동을 유발할 수 있습니다.

쉽게 말해 www.naver.com을 가려고 버튼을 눌렀는데 www.lotto.com으로 가는것을 막는 기능이다.

 

 


 

 

해결법


python코드에 아래와 같이 추가해준다.

def save_token(request):
    code = request.GET.get('code')

    # X-Frame-Options 헤더 설정
    response = HttpResponse(code)
    response['X-Frame-Options'] = 'SAMEORIGIN'
    
    return response


위 코드와 같이 'X-Frame-Options'를 추가해주면 된다.
이후 전달받은 인가코드를 사용하여 token을 발급받고 그 토큰을 사용해서 로그인을 진행하면된다

.

 

끝.

728x90
반응형