소셜 로그인(Social Login)은 사용자가 별도의 회원가입 없이 Google, Kakao, Facebook 같은 외부 서비스 계정을 이용해 로그인하는 방식이다.
Django에서는 dj-rest-auth와 django-allauth를 사용하면 쉽게 OAuth 로그인을 구현할 수 있다.
이번 글에서는 Kakao, Google 로그인을 Django REST Framework(DRF)에 적용하는 방법을 알아보자.
소셜 로그인을 구현하려면 dj-rest-auth와 django-allauth 패키지가 필요하다.
아래 명령어로 설치하자.
pip install dj-rest-auth
pip install django-allauth
이제 Django 앱 설정을 수정하자.
settings.py)INSTALLED_APPS에 패키지 추가INSTALLED_APPS = [
...
'rest_framework',
'rest_framework.authtoken', # dj-rest-auth에서 필요
'dj_rest_auth',
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.google', # Google 로그인
'allauth.socialaccount.providers.kakao', # Kakao 로그인
]
여기서 사용하고 싶은 OAuth 제공자(provider)를 추가하면 된다.
이번 글에서는 Google, Kakao을 적용할 거라 관련된 provider를 추가했다.
소셜 로그인을 사용하려면 AUTHENTICATION_BACKENDS에 allauth 관련 설정을 추가해야 한다.
AUTHENTICATION_BACKENDS = [
'django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend',
]
이제 Django가 django-allauth를 통해 소셜 로그인을 처리할 수 있게 된다.
이제 dj-rest-auth에서 제공하는 기본 URL을 추가하자.
from django.urls import path, include
urlpatterns = [
path('auth/', include('dj_rest_auth.urls')), # 기본 로그인/회원가입
path('auth/social/', include('dj_rest_auth.social_urls')), # 소셜 로그인
]
이제 /auth/social/ 경로에서 소셜 로그인 API를 사용할 수 있다!
이제 Google, Kakao, Facebook에서 발급한 Client ID와 Client Secret을 Django에 등록해야 한다.
관리자 페이지에서 직접 입력하거나, settings.py에서 기본값을 지정할 수 있다.
SOCIALACCOUNT_PROVIDERS = {
'google': {
'APP': {
'client_id': 'GOOGLE_CLIENT_ID',
'secret': 'GOOGLE_CLIENT_SECRET',
}
},
'kakao': {
'APP': {
'client_id': 'KAKAO_REST_API_KEY',
'secret': '',
}
},
}
여기서 client_id와 secret 값은 각 플랫폼의 OAuth 개발자 콘솔에서 발급받아야 한다.
이제 실제로 로그인 요청을 보내보자.
Google 로그인은 다음과 같은 API 요청을 사용한다.
POST /auth/social/login/
Content-Type: application/json
{
"provider": "google",
"access_token": "GOOGLE_OAUTH_ACCESS_TOKEN"
}
여기서 "access_token" 값은 클라이언트(React, Vue 등)에서 Google 로그인을 통해 받은 OAuth 토큰을 넣어야 한다.
POST /auth/social/login/
Content-Type: application/json
{
"provider": "kakao",
"access_token": "KAKAO_OAUTH_ACCESS_TOKEN"
}
성공적으로 로그인하면 JWT 토큰이 발급된다! 🎉
소셜 로그인 시 자동으로 회원가입하도록 만들 수도 있다.
이 기능은 dj-rest-auth에서 기본적으로 제공한다.
settings.py에 아래 옵션을 추가하자.
REST_AUTH_REGISTER_ON_SOCIAL_LOGIN = True
이렇게 하면 소셜 로그인으로 처음 인증된 사용자는 자동으로 회원가입이 진행된다.
dj-rest-auth와 django-allauth를 사용하면 소셜 로그인을 쉽게 구현할 수 있다. /auth/social/login/ 엔드포인트를 통해 소셜 로그인 API를 사용할 수 있다. 소셜 로그인은 JWT 기반 인증과 함께 사용하면 강력한 인증 시스템을 구축할 수 있다!
다음 글에서는 OAuth 토큰을 안전하게 저장하는 방법과 로그아웃 처리에 대해 다뤄보자.