최종 과제의 목표지만 서브 기능 중 하나인 '로그인 시 SNS 소셜 로그인 연동' 기능을 찾아본 결과, 가능하다는 자료를 찾게 되었다.
SNS 연동 회원가입 및 로그인 기능을 추가하려면, 각 SNS 플랫폼의 인증 방식에 맞게 구현해야한다. 예를 들어, 페이스북, 구글, 카카오톡 등에서 제공하는 OAuth 2.0 기반 인증을 사용할 수 있다. Django에서는 이를 지원하기 위해 social-auth-app-django
라는 라이브러리를 사용할 수 있다.
즉, Django + DRF에서 SNS 로그인 기능을 추가하는 방법은 다음과 같다.
social-auth-app-django
설치먼저 SNS 연동을 위한 라이브러리인 social-auth-app-django
를 설치해야한다.
pip install social-auth-app-django
settings.py
파일에서 필요한 설정을 추가한다.
INSTALLED_APPS = [
# 기존 앱들...
'social_django', # 추가
]
# 소셜 로그인 서비스에 맞는 키와 시크릿 설정
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = '<google-client-id>'
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = '<google-client-secret>'
SOCIAL_AUTH_FACEBOOK_KEY = '<facebook-app-id>'
SOCIAL_AUTH_FACEBOOK_SECRET = '<facebook-app-secret>'
AUTHENTICATION_BACKENDS = (
'social_core.backends.google.GoogleOAuth2',
'social_core.backends.facebook.FacebookOAuth2',
'django.contrib.auth.backends.ModelBackend', # 기본 인증 백엔드
)
SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/' # 로그인 후 리디렉션 URL
SOCIAL_AUTH_LOGIN_ERROR_URL = '/' # 로그인 실패 시 리디렉션 URL
# 추가적으로 설정해야 하는 것들
LOGIN_URL = 'login' # 로그인 URL
LOGIN_REDIRECT_URL = '/' # 로그인 후 리디렉션될 URL
urls.py
파일에서 소셜 로그인 URL을 추가한다.
from django.urls import path, include
urlpatterns = [
# 기존 URL들...
path('auth/', include('social_django.urls')), # 소셜 로그인 URL 포함
]
SNS 로그인 기능을 제공하는 뷰를 추가한다. 로그인 후, 인증 토큰을 받아오는 작업을 처리하는 코드이다. 예를 들어, 구글 로그인을 처리하는 API는 다음과 같이 작성할 수 있다.
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
from social_django.utils import psa
@api_view(['POST'])
def google_login(request):
token = request.data.get('token') # 클라이언트에서 전달된 Google OAuth2 token
# 사용자 인증
try:
# PSR(Access Token) 인증을 통해 소셜 계정 사용자 정보 추출
user = psa('social:complete') # 'social:complete'를 통해 로그인 처리
return Response({
'message': 'Login successful',
'user': user.username, # 또는 다른 사용자 정보
'access_token': str(user.auth_token) # JWT나 Custom Token을 반환할 수도 있음
}, status=status.HTTP_200_OK)
except Exception as e:
return Response({
'error': str(e)
}, status=status.HTTP_400_BAD_REQUEST)
이 코드는 클라이언트로부터 Google OAuth 토큰을 받아서, 해당 토큰을 통해 social-auth-app-django
라이브러리에서 제공하는 방법으로 인증을 진행한다. Facebook이나 다른 SNS도 비슷한 방식으로 처리할 수 있다.
SNS 로그인 후, 해당 SNS 계정에 맞는 사용자를 Django 모델에 매핑하거나, 새 사용자를 생성하여 로그인 상태를 유지할 수 있도록 해야한다.
social-auth-app-django
에서는 기본적으로 사용자 모델(User
)과 연결하여, SNS 계정으로 로그인한 사용자 정보를 저장하고, 해당 사용자에 대한 JWT 토큰이나 기타 인증 토큰을 생성할 수 있도록 도와준다.
클라이언트에서는 SNS 로그인 버튼을 추가하고, 해당 SNS에서 제공하는 로그인 플로우를 통해 사용자 인증 후, 얻은 토큰을 서버로 전달하면 된다. 이때 토큰은 google_login
과 같은 API에 전달하여 처리한다.
SNS 연동 로그인 기능을 추가하는 방법은 위와 같이 social-auth-app-django
라이브러리를 활용하는 것이다. 이 라이브러리를 사용하면, 다양한 SNS 계정으로 로그인 기능을 손쉽게 구현할 수 있다. 이를 통해 Django와 DRF를 기반으로 한 API에서도 SNS 연동 로그인 기능을 지원할 수 있다.
이렇게 하면 SNS 연동 회원가입 및 로그인을 구현할 수 있다는 것을 알게되었다. 보다 유저들이 쉽게 사용할 수 있도록 기능을 더 공부해봐야겠다.