diff --git a/ginza/settings/base.py b/ginza/settings/base.py index 378f652..ba91edf 100644 --- a/ginza/settings/base.py +++ b/ginza/settings/base.py @@ -30,6 +30,7 @@ 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.sites', + 'corsheaders' ] + CUSTOMIZED_APPS + THIRD_PARTY_APPS MIDDLEWARE = [ @@ -40,6 +41,7 @@ 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'corsheaders.middleware.CorsMiddleware', ] AUTH_USER_MODEL = 'user.User' diff --git a/ginza/settings/dev.py b/ginza/settings/dev.py index fa9ca68..1c860d0 100644 --- a/ginza/settings/dev.py +++ b/ginza/settings/dev.py @@ -137,4 +137,4 @@ KAKAO_REST_API_KEY = env.str('KAKAO_REST_API_KEY') KAKAO_REDIRECT_URI = env.str('KAKAO_REDIRECT_URI') -KAKAO_SECRET_KEY = env.str('KAKAO_SECRET_KEY') \ No newline at end of file +KAKAO_SECRET_KEY = env.str('KAKAO_SECRET_KEY') diff --git a/ginza/settings/local.py b/ginza/settings/local.py index 47ab072..3c5796d 100644 --- a/ginza/settings/local.py +++ b/ginza/settings/local.py @@ -132,3 +132,6 @@ KAKAO_REST_API_KEY = env.str('KAKAO_REST_API_KEY') KAKAO_REDIRECT_URI = env.str('KAKAO_REDIRECT_URI') KAKAO_SECRET_KEY = env.str('KAKAO_SECRET_KEY') + +CORS_ORIGIN_ALLOW_ALL = True +CORS_ALLOW_CREDENTIALS = True diff --git a/requirements.txt b/requirements.txt index d9f49fd..c4d37bc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,6 +9,7 @@ coreschema==0.0.4 coverage==6.3.2 Deprecated==1.2.13 Django==3.2.13 +django-cors-headers==3.12.0 django-environ==0.8.1 django-extensions==3.1.5 django-redis==5.2.0 diff --git a/user/serializer.py b/user/serializer.py new file mode 100644 index 0000000..65c52ea --- /dev/null +++ b/user/serializer.py @@ -0,0 +1,18 @@ +from rest_framework import serializers + + +class SignupRequestBodySerializer(serializers.Serializer): + def update(self, instance, validated_data): + pass + + def create(self, validated_data): + pass + + email = serializers.EmailField() + password = serializers.CharField() + name = serializers.CharField() + mobile = serializers.CharField(max_length=11) + birthday = serializers.DateField() + is_solar_calendar = serializers.BooleanField() + agreed_with_mkt_info_subscription = serializers.BooleanField() + diff --git a/user/urls.py b/user/urls.py index a8a936b..5b59f59 100644 --- a/user/urls.py +++ b/user/urls.py @@ -1,5 +1,5 @@ from django.urls import path -from user.views import SignupView, LoginView, LogoutView, KakaoOAuthLoginView, KakaoOAuthLoginCallbackView +from user.views import SignupView, LoginView, LogoutView, KakaoOAuthLoginView from util.common import API_COMMON_PATH urlpatterns = [ @@ -7,6 +7,6 @@ path(API_COMMON_PATH + 'auth/login', LoginView.as_view()), path(API_COMMON_PATH + 'auth/logout', LogoutView.as_view()), path(API_COMMON_PATH + 'oauth/kakao/login', KakaoOAuthLoginView.as_view()), - path(API_COMMON_PATH + 'oauth/kakao/login/callback', KakaoOAuthLoginCallbackView.as_view()) + # path(API_COMMON_PATH + 'oauth/kakao/login/callback', KakaoOAuthLoginCallbackView.as_view()) ] diff --git a/user/views.py b/user/views.py index c184715..934d841 100644 --- a/user/views.py +++ b/user/views.py @@ -1,3 +1,5 @@ +import http + import binascii import json import logging @@ -7,17 +9,20 @@ from django.contrib.auth import authenticate, logout from django.conf import settings from django.shortcuts import redirect +from drf_yasg.utils import swagger_auto_schema from ginza.redis import redis_conn from rest_framework.views import APIView from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from user.models import User, UserProfile +from user.serializer import SignupRequestBodySerializer logger = logging.getLogger('api') class SignupView(APIView): + @swagger_auto_schema(request_body=SignupRequestBodySerializer) def post(self, request, *args, **kwargs): try: data = request.data @@ -96,24 +101,29 @@ def post(self, request): # reference: https://velog.io/@junsikchoi/Django%EB%A1%9C-%EC%B9%B4%EC%B9%B4%EC%98%A4-%EC%86%8C%EC%85%9C-%EB%A1%9C%EA%B7%B8%EC%9D%B8%EC%9D%84-%ED%95%B4%EB%B3%B4%EC%9E%90 -class KakaoOAuthLoginCallbackView(APIView): - def get(self, request): - auth_code = request.GET.get('code') - kakao_token_api = 'https://kauth.kakao.com/oauth/token' - data = { - 'grant_type': 'authorization_code', - 'client_id': settings.KAKAO_REST_API_KEY, - 'redirection_uri': settings.KAKAO_REDIRECT_URI, - 'client_secret': settings.KAKAO_SECRET_KEY, - 'code': auth_code - } - token_response = requests.post(kakao_token_api, data=data) - access_token = token_response.json().get('access_token') - user_info_response = requests.get('https://kapi.kakao.com/v2/user/me', headers={"Authorization": f'Bearer ${access_token}'}) - response = { - 'user_info': user_info_response.json() - } - return Response(response) +# class KakaoOAuthLoginCallbackView(APIView): +# def get(self, request): +# auth_code = request.GET.get('code') +# kakao_token_api = 'https://kauth.kakao.com/oauth/token' +# data = { +# 'grant_type': 'authorization_code', +# 'client_id': settings.KAKAO_REST_API_KEY, +# 'redirection_uri': settings.KAKAO_REDIRECT_URI, +# 'client_secret': settings.KAKAO_SECRET_KEY, +# 'code': auth_code +# } +# token_response = requests.post(kakao_token_api, data=data) +# access_token = token_response.json().get('access_token') +# +# headers = { +# "Authorization": f'Bearer ${access_token}', +# "Content-type": "application/x-www-form-urlencoded;charset=utf-8" +# } +# user_info_response = requests.get('https://kapi.kakao.com/v2/user/me', headers=headers) +# response = { +# 'user_info': user_info_response.json() +# } +# return Response(response) class KakaoOAuthLoginView(APIView): @@ -122,5 +132,8 @@ def get(self, request): redirect_url = settings.KAKAO_REDIRECT_URI url = "https://kauth.kakao.com/oauth/authorize?response_type=code&client_id={0}&redirect_uri={1}".\ format(client_id, redirect_url) - res = redirect(url) - return res + + response = { + 'url': url + } + return Response(status=http.HTTPStatus.OK, data=response)