diff --git a/server/apps/wapl/migrations/0002_user_kakao_id.py b/server/apps/wapl/migrations/0002_user_kakao_id.py
new file mode 100644
index 0000000..f392fa1
--- /dev/null
+++ b/server/apps/wapl/migrations/0002_user_kakao_id.py
@@ -0,0 +1,18 @@
+# Generated by Django 4.1.5 on 2023-01-31 09:13
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('wapl', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='user',
+ name='kakao_id',
+ field=models.IntegerField(default=-1),
+ ),
+ ]
diff --git a/server/apps/wapl/models.py b/server/apps/wapl/models.py
index b003f2a..7d77f9b 100644
--- a/server/apps/wapl/models.py
+++ b/server/apps/wapl/models.py
@@ -10,4 +10,5 @@ class User(AbstractUser):
gender = None
job = None
desc = None
- email = models.EmailField(null=True)
\ No newline at end of file
+ email = models.EmailField(null=True)
+ kakao_id = models.IntegerField(default=-1)
\ No newline at end of file
diff --git a/server/apps/wapl/templates/login.html b/server/apps/wapl/templates/login.html
index 9bbca2f..bd2eeb8 100644
--- a/server/apps/wapl/templates/login.html
+++ b/server/apps/wapl/templates/login.html
@@ -23,6 +23,7 @@
diff --git a/server/apps/wapl/templates/test_nickname.html b/server/apps/wapl/templates/test_nickname.html
new file mode 100644
index 0000000..e69de29
diff --git a/server/apps/wapl/urls.py b/server/apps/wapl/urls.py
index fc7f90d..bc590d6 100644
--- a/server/apps/wapl/urls.py
+++ b/server/apps/wapl/urls.py
@@ -4,13 +4,13 @@
app_name = "wapl"
urlpatterns= [
-
path("main", views.main, name="main"),
path("login", views.login, name="login"),
path("logout", views.logout, name="logout"),
path("signup", views.signup, name="signup"),
path("", views.start, name="start"),
+ path("kakao", views.kakao_login, name="kakao_login"),
+ path("accounts/kakao/login/callback/", views.kakao_callback, name="kakao_callback"),
# path("plan", views.create, name="create"), # 용현님 일정 ajax
# path("plan/", views.comment, name="comment"), # 윤정님 일정 상세
-
]
\ No newline at end of file
diff --git a/server/apps/wapl/views.py b/server/apps/wapl/views.py
index 35e4b07..a8cbf5d 100644
--- a/server/apps/wapl/views.py
+++ b/server/apps/wapl/views.py
@@ -2,10 +2,10 @@
from django.shortcuts import render, redirect
from django.http.request import HttpRequest
from . import forms
+from . import models
from django.contrib import auth
-
-
-# Create your views here.
+import requests
+from django.http import JsonResponse
def main(request:HttpRequest,*args, **kwargs):
return render(request, "main.html")
@@ -19,7 +19,7 @@ def signup(request:HttpRequest, *args, **kwargs):
if form.is_valid():
user = form.save()
auth.login(request, user, backend='django.contrib.auth.backends.ModelBackend')
- return redirect('wapl:login')
+ return redirect('wapl:main')
else:
return redirect('wapl:signup')
else:
@@ -36,7 +36,6 @@ def login(request:HttpRequest, *args, **kwargs):
if form.is_valid():
user = form.get_user()
auth.login(request, user, backend='django.contrib.auth.backends.ModelBackend')
- print("로그인 성공~~~~~~~~~")
return redirect('wapl:main')
else:
context = {
@@ -53,3 +52,46 @@ def login(request:HttpRequest, *args, **kwargs):
def logout(request:HttpRequest, *args, **kwargs):
auth.logout(request)
return redirect('wapl:start')
+
+def kakao_login(request, *args, **kwargs):
+ client_id = "9b8c21fe30f9bef16b12a8a512bf18a0"
+ REDIRECT_URI = "http://localhost:8000/accounts/kakao/login/callback/"
+ return redirect(
+ f"https://kauth.kakao.com/oauth/authorize?client_id={client_id}&redirect_uri={REDIRECT_URI}&response_type=code"
+ )
+
+def kakao_callback(request):
+ try:
+ code = request.GET.get("code")
+ client_id = "9b8c21fe30f9bef16b12a8a512bf18a0"
+ redirect_uri = "http://localhost:8000/accounts/kakao/login/callback/"
+ token_request = requests.get(
+ f"https://kauth.kakao.com/oauth/token?grant_type=authorization_code&client_id={client_id}&redirect_uri={redirect_uri}&code={code}"
+ )
+ token_json = token_request.json()
+
+ error = token_json.get("error",None)
+ if error is not None :
+ return JsonResponse({"message": "INVALID_CODE"}, status = 400)
+ access_token = token_json.get("access_token")
+ #------get kakaotalk profile info------#
+ profile_request = requests.get(
+ "https://kapi.kakao.com/v2/user/me", headers={"Authorization" : f"Bearer {access_token}"},
+ )
+ profile_json = profile_request.json()
+ kakao_id = profile_json.get("id")
+ except KeyError:
+ return JsonResponse({"message" : "INVALID_TOKEN"}, status = 400)
+ except access_token.DoesNotExist:
+ return JsonResponse({"message" : "INVALID_TOKEN"}, status = 400)
+
+ if models.User.objects.filter(kakao_id = kakao_id).exists():
+ user = models.User.objects.get(kakao_id = kakao_id)
+ login(request, user)
+ return redirect('wapl:main')
+ else:
+ user = models.User(
+ kakao_id = kakao_id,
+ ).save()
+ login(request, user)
+ return redirect('wapl:main')
\ No newline at end of file