[python] Django REST framework에서의 소셜 미디어 로그인 처리 방법
Django REST framework은 소셜 미디어 로그인을 간편하게 처리할 수 있는 기능을 제공합니다. 소셜 미디어 로그인은 사용자가 자신의 소셜 미디어 계정을 사용하여 애플리케이션에 로그인할 수 있는 기능을 의미합니다. 이를 구현하기 위해서는 몇 가지 단계를 따라야 합니다.
설정
먼저, Django 프로젝트에 필요한 패키지들을 설치해야 합니다. 다음 명령어를 통해 필요한 패키지를 설치할 수 있습니다:
pip install social-auth-app-django
설치가 완료되면 settings.py
파일에 아래와 같이 소셜 미디어 로그인 관련 설정을 추가해야 합니다:
INSTALLED_APPS = [
...
'social_django',
...
]
AUTHENTICATION_BACKENDS = [
...
'social_core.backends.google.GoogleOAuth2',
'social_core.backends.facebook.FacebookOAuth2',
...
]
SOCIAL_AUTH_FACEBOOK_KEY = 'YOUR_FACEBOOK_APP_KEY'
SOCIAL_AUTH_FACEBOOK_SECRET = 'YOUR_FACEBOOK_APP_SECRET'
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = 'YOUR_GOOGLE_APP_KEY'
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = 'YOUR_GOOGLE_APP_SECRET'
위 설정에서 YOUR_FACEBOOK_APP_KEY
와 YOUR_FACEBOOK_APP_SECRET
부분을 자신의 Facebook 앱의 키와 시크릿으로 대체해야 합니다. 마찬가지로 YOUR_GOOGLE_APP_KEY
와 YOUR_GOOGLE_APP_SECRET
부분을 자신의 Google 앱의 키와 시크릿으로 대체해야 합니다.
URL 설정
소셜 미디어 로그인 기능을 사용하기 위해서는 URL 라우팅을 설정해야 합니다. urls.py
파일에 아래와 같이 URL을 추가해야 합니다:
from django.urls import path, include
from rest_framework_social_oauth2 import urls
urlpatterns = [
...
path('api-auth/', include('rest_framework.urls')),
path('auth/', include('social_django.urls', namespace='social')),
path('auth/', include('rest_framework_social_oauth2.urls')),
...
]
API 엔드포인트
RESTful API에 소셜 미디어 로그인 기능을 추가하려면, views.py
파일에 아래와 같이 소셜 미디어 로그인을 처리하는 뷰를 추가해야 합니다:
from social_django.utils import load_backend, load_strategy
from oauth2_provider.models import AccessToken
from oauth2_provider.settings import oauth2_settings
class SocialLoginView(APIView):
permission_classes = (permissions.AllowAny,)
def post(self, request):
strategy = load_strategy(request)
backend = load_backend(strategy, 'facebook', '/auth/token/')
try:
access_token = self.request.data.get('access_token')
token = AccessToken.objects.get(token=access_token)
except AccessToken.DoesNotExist:
return Response({'error': 'Invalid access token'}, status=400)
if token.is_expired():
token.delete()
return Response({'error': 'Token expired'}, status=403)
user = backend.do_auth(token)
if user:
return Response({'token': user.auth_token.key})
else:
return Response({'error': 'Failed to authenticate'}, status=400)
위의 코드는 Facebook을 예시로 사용한 것이며, Google 등 다른 소셜 미디어 로그인 방법도 동일한 방식으로 구현할 수 있습니다.
이제 소셜 미디어 로그인 기능을 사용할 수 있는 RESTful API가 준비되었습니다.
참고 자료
- Django REST framework 소셜 미디어 로그인 공식 문서: https://python-social-auth.readthedocs.io/en/latest/
- Django REST framework 공식 문서: https://www.django-rest-framework.org/
- Facebook 개발자 센터: https://developers.facebook.com/
- Google 개발자 콘솔: https://console.developers.google.com/