[Django Rest-Framework] 소셜로그인 구현하기 - google, naver, kakao, github

hodu·2022년 8월 6일
1

drf도 제대로 몰랐을 때 소셜로그인을 구현하라는 과제를 받아서 엄청 고생하며 구현했었다..
다른 사람들이 나처럼 힘들지 않았으면 하는 마음으로 벨로그에 작성하겠다고 한지 어언 4개월 전.. 이제서야 기억을 더듬어가며 작성한다.

Django-Rest-Framework(DRF)로 소셜 로그인 API 구현해보기(Google, KaKao, Github)
나는 이 글을 참고했고 그땐 정말 하늘에서 내려온 동아줄 같았다. 이자리를 빌어 작성자분께 감사하다는 말씀을 드린다.

이 포스팅에서 이용할 패키지는 allauth이다.
allauth : 다양한 서비스(구글, 네이버, 카카오, 깃헙 등)를 통한 회원가입을 편리하게 해주는 django의 익스텐션

0. 기본 세팅

장고가 설치되어있고 장고 기본 세팅이 되어있다는 가정 하에 진행한다.

패키지 설치

pip install djangorestframework
pip install djangorestframework-simplejwt
pip install django-allauth

views.py

여기서 구현한 서비스 외 다른 소셜로그인을 추가한다고 하면 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

urls.py

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'),
 ]

1. 서비스에 등록하기

1. 구글

링크 구글 프로젝트 생성하기 를 클릭하면 아래와 같은 화면이 나온다.

내 앱이름을 정하고, 만들기를 클릭한다.
다음으론 OAuth 동의화면을 설정해주어야 한다.

API 및 서비스 - OAuth 동의화면을 클릭하면 뭔가를 작성하는 페이지가 나온다.(현재 캡쳐화면은 이미 OAuth 동의가 모두 작성된 상태)

다시 사용자 인증 정보 탭으로 넘어가면 위 화면이 나올 것이고, 여기서 빨간 네모 CREATE CREDENTIALS를 클릭 한 뒤 OAuth 클라이언트 ID를 눌러서 정보를 입력해준다.
모두 입력이 되었다면 클라이언트 ID, SECRET KEY를 받을 수 있다.

2. 네이버

네이버 개발자 센터로 들어가서 마찬가지로 내 앱을 등록해준다.
네이버 developers - 애플리케이션 등록(링크)

필요 내용들을 모두 등록하고나면 아래와 같은 페이지에서 client ID, client Secret을 얻을 수 있다.

3. 카카오

다른 소셜로그인 등록방법과 거의 유사하다. 카카오 developer(링크) 여기서 등록을 한다.


그러면 다른 서비스와는 다르게 앱키만 제공하는데 여기서 REST API키만 알고있으면 된다.

4. 깃헙

깃헙은 settings-developer settings-OAuth Apps로 들어가야 한다.
깃헙 OAuth 등록하기(링크)

등록 시 앱에서 필요한 정보(이메일 정보 등)를 잘 체크해야 한다.


Client ID, Secret을 발급받을 수 있다.

2. django admin 등록

해당 서비스들을 admin에서 등록해주어야 한다.
소셜 계정 - 소셜 어플리케이션 에서 등록 할 수 있다.

각 서비스에서 받아온 클라이언트 아이디, 비밀 키값을 차례로 넣어주면 되고 카카오는 클라이언트 아이디에 REST-API키를 등록하면 된다.

이렇게 하면 등록은 끝났다.

+) SITE_ID가 자꾸 변경되거나 SITE_ID를 고정하고 싶은 경우에는 아래 글을 참고하면 된다.
[링크] django SITE_ID 변경 이슈 해결방법(SITE_ID 고정하기)

profile
안녕 세계!

0개의 댓글