drf도 제대로 몰랐을 때 소셜로그인을 구현하라는 과제를 받아서 엄청 고생하며 구현했었다..
다른 사람들이 나처럼 힘들지 않았으면 하는 마음으로 벨로그에 작성하겠다고 한지 어언 4개월 전.. 이제서야 기억을 더듬어가며 작성한다.
Django-Rest-Framework(DRF)로 소셜 로그인 API 구현해보기(Google, KaKao, Github)
나는 이 글을 참고했고 그땐 정말 하늘에서 내려온 동아줄 같았다. 이자리를 빌어 작성자분께 감사하다는 말씀을 드린다.
이 포스팅에서 이용할 패키지는 allauth이다.
allauth : 다양한 서비스(구글, 네이버, 카카오, 깃헙 등)를 통한 회원가입을 편리하게 해주는 django의 익스텐션
장고가 설치되어있고 장고 기본 세팅이 되어있다는 가정 하에 진행한다.
pip install djangorestframework
pip install djangorestframework-simplejwt
pip install django-allauth
여기서 구현한 서비스 외 다른 소셜로그인을 추가한다고 하면 allauth패키지 내에 서비스명이 있는지 확인하고 아래 코드와 같이 추가하면 된다.
# 소셜 로그인
BASE_URL = 'http://localhost:8000/api/v1/accounts/rest-auth/'
KAKAO_CALLBACK_URI = BASE_URL + 'kakao/callback/'
NAVER_CALLBACK_URI = BASE_URL + 'naver/callback/'
GOOGLE_CALLBACK_URI = BASE_URL + 'google/callback/'
GITHUB_CALLBACK_URI = BASE_URL + 'github/callback/'
class KakaoLogin(SocialLoginView):
adapter_class = KakaoOAuth2Adapter
callbakc_url = KAKAO_CALLBACK_URI
client_class = OAuth2Client
serializer_class = SocialLoginSerializer
class NaverLogin(SocialLoginView):
adapter_class = NaverOAuth2Adapter
callback_url = NAVER_CALLBACK_URI
client_class = OAuth2Client
serializer_class = SocialLoginSerializer
class GithubLogin(SocialLoginView):
adapter_class = GitHubOAuth2Adapter
callback_url = GITHUB_CALLBACK_URI
client_class = OAuth2Client
serializer_class = SocialLoginSerializer
class GoogleLogin(SocialLoginView):
adapter_class = GoogleOAuth2Adapter
callback_url = GOOGLE_CALLBACK_URI
client_class = OAuth2Client
serializer_class = SocialLoginSerializer
urlpatterns =[
path('rest-auth/kakao/', views.KakaoLogin.as_view(), name='kakao'),
path('rest-auth/naver/', views.NaverLogin.as_view(), name='naver'),
path('rest-auth/google/', views.GoogleLogin.as_view(), name='google'),
path('rest-auth/github/', views.GithubLogin.as_view(), name='github'),
]
링크 구글 프로젝트 생성하기 를 클릭하면 아래와 같은 화면이 나온다.
내 앱이름을 정하고, 만들기를 클릭한다.
다음으론 OAuth 동의화면을 설정해주어야 한다.
API 및 서비스 - OAuth 동의화면을 클릭하면 뭔가를 작성하는 페이지가 나온다.(현재 캡쳐화면은 이미 OAuth 동의가 모두 작성된 상태)
다시 사용자 인증 정보 탭으로 넘어가면 위 화면이 나올 것이고, 여기서 빨간 네모 CREATE CREDENTIALS를 클릭 한 뒤 OAuth 클라이언트 ID를 눌러서 정보를 입력해준다.
모두 입력이 되었다면 클라이언트 ID, SECRET KEY를 받을 수 있다.
네이버 개발자 센터로 들어가서 마찬가지로 내 앱을 등록해준다.
네이버 developers - 애플리케이션 등록(링크)
필요 내용들을 모두 등록하고나면 아래와 같은 페이지에서 client ID, client Secret을 얻을 수 있다.
다른 소셜로그인 등록방법과 거의 유사하다. 카카오 developer(링크) 여기서 등록을 한다.
그러면 다른 서비스와는 다르게 앱키만 제공하는데 여기서 REST API키만 알고있으면 된다.
깃헙은 settings-developer settings-OAuth Apps로 들어가야 한다.
깃헙 OAuth 등록하기(링크)
등록 시 앱에서 필요한 정보(이메일 정보 등)를 잘 체크해야 한다.
Client ID, Secret을 발급받을 수 있다.
해당 서비스들을 admin에서 등록해주어야 한다.
소셜 계정 - 소셜 어플리케이션 에서 등록 할 수 있다.
각 서비스에서 받아온 클라이언트 아이디, 비밀 키값을 차례로 넣어주면 되고 카카오는 클라이언트 아이디에 REST-API키를 등록하면 된다.
이렇게 하면 등록은 끝났다.
+) SITE_ID가 자꾸 변경되거나 SITE_ID를 고정하고 싶은 경우에는 아래 글을 참고하면 된다.
[링크] django SITE_ID 변경 이슈 해결방법(SITE_ID 고정하기)