- 카카오 로그인 진행 과정
- 카카오 개발자 애플리케이션 등록 + 카카오 로그인 활성화
- 아래 링크에서 내 애플리케이션을 하나 생성하면 앱 키를 생성 받을 수 있음
- 앱 키 생성 확인 후 카카오 로그인 활성화 + Redirect URI를 추가해 줘야함
링크 : https://developers.kakao.com/
- Code
class KakaoSignInView(View):
"""
인증 코드 받아오기
"""
def get(self, request):
current_site = get_current_site(request)
client_id = KAKAO_KEY
redirect_uri = "http://" + current_site.domain + "/account/sign-in/kakao/callback/"
return redirect(
f"https://kauth.kakao.com/oauth/authorize?client_id={client_id}&redirect_uri={redirect_uri}&response_type=code"
)
class KakaoSignInCallbackView(View):
def get(self, request):
try:
# 현재 도메인 주소
current_site = get_current_site(request)
code = request.GET.get("code")
kakao_token_api = 'https://kauth.kakao.com/oauth/token'
redirect_uri = "http://" + current_site.domain + "/account/sign-in/kakao/callback/"
data = {
'grant_type': 'authorization_code',
'client_id': KAKAO_KEY,
'redirect_uri': redirect_uri,
'code': code
}
# token request 및 response
token_response = requests.post(kakao_token_api, data=data)
error = token_response.json().get('error', None)
if error is not None:
raise Exception
access_token = token_response.json().get('access_token')
profile_response = requests.get('https://kapi.kakao.com/v2/user/me', headers={"Authorization": f'Bearer ${access_token}'})
email = profile_response.json().get("kakao_account", None).get('email')
name = profile_response.json().get("properties").get("nickname")
email_exist = True
if email is None:
email_exist = False
raise Exception
try:
user= Account.objects.get(email=email, type='kakao')
if user.type != 'kakao':
raise Exception
except Account.DoesNotExist:
# 회원이 존재 하지 않으면 DB 삽입
user = Account.objects.create(
email=email,
name=name,
type='kakao',
is_active=email_exist,
)
user.save()
request.session['token'] = access_token
return redirect("main:index")
except Exception:
return redirect('account:login')
'Python & Django' 카테고리의 다른 글
[Python] 권장사항 (0) | 2021.09.02 |
---|---|
[Python] pool_recycle + wait_timeout (0) | 2021.09.01 |
[Django] Django url tag( parameter ) (0) | 2021.08.25 |
[Django] Django 비밀번호 암호화(Argon2 이용) (0) | 2021.08.25 |
[Django] Django Setting (0) | 2021.08.25 |