카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을 발급받고 그 토큰을 사용해서 로그인을 진행하면된다
.
끝.