소셜 로그인 연동 찾아본 자료

SSO·2025년 1월 6일
0

최종 과제의 목표지만 서브 기능 중 하나인 '로그인 시 SNS 소셜 로그인 연동' 기능을 찾아본 결과, 가능하다는 자료를 찾게 되었다.


SNS 연동 회원가입 및 로그인 기능을 추가하려면, 각 SNS 플랫폼의 인증 방식에 맞게 구현해야한다. 예를 들어, 페이스북, 구글, 카카오톡 등에서 제공하는 OAuth 2.0 기반 인증을 사용할 수 있다. Django에서는 이를 지원하기 위해 social-auth-app-django라는 라이브러리를 사용할 수 있다.
즉, Django + DRF에서 SNS 로그인 기능을 추가하는 방법은 다음과 같다.

1. social-auth-app-django 설치

먼저 SNS 연동을 위한 라이브러리인 social-auth-app-django를 설치해야한다.

pip install social-auth-app-django

2. 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

3. URL 설정

urls.py 파일에서 소셜 로그인 URL을 추가한다.

from django.urls import path, include

urlpatterns = [
    # 기존 URL들...
    path('auth/', include('social_django.urls')),  # 소셜 로그인 URL 포함
]

4. SNS 로그인 API

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도 비슷한 방식으로 처리할 수 있다.

5. 토큰 처리 및 사용자 데이터 저장

SNS 로그인 후, 해당 SNS 계정에 맞는 사용자를 Django 모델에 매핑하거나, 새 사용자를 생성하여 로그인 상태를 유지할 수 있도록 해야한다.

social-auth-app-django에서는 기본적으로 사용자 모델(User)과 연결하여, SNS 계정으로 로그인한 사용자 정보를 저장하고, 해당 사용자에 대한 JWT 토큰이나 기타 인증 토큰을 생성할 수 있도록 도와준다.

6. 클라이언트 구현

클라이언트에서는 SNS 로그인 버튼을 추가하고, 해당 SNS에서 제공하는 로그인 플로우를 통해 사용자 인증 후, 얻은 토큰을 서버로 전달하면 된다. 이때 토큰은 google_login과 같은 API에 전달하여 처리한다.

결론

SNS 연동 로그인 기능을 추가하는 방법은 위와 같이 social-auth-app-django 라이브러리를 활용하는 것이다. 이 라이브러리를 사용하면, 다양한 SNS 계정으로 로그인 기능을 손쉽게 구현할 수 있다. 이를 통해 Django와 DRF를 기반으로 한 API에서도 SNS 연동 로그인 기능을 지원할 수 있다.

추가로 구현할 수 있는 기능들

  • 회원가입: SNS 계정으로 로그인한 사용자가 시스템에 처음 가입하는 경우, 프로필을 추가하거나 이메일을 인증하는 등의 처리를 추가할 수 있다.
  • 로그인 후 리디렉션: 로그인 후 원하는 페이지로 리디렉션할 수 있다.
  • 다양한 SNS 지원: Google, Facebook 외에도 Kakao, GitHub 등 다양한 SNS 연동을 지원한다.

이렇게 하면 SNS 연동 회원가입 및 로그인을 구현할 수 있다는 것을 알게되었다. 보다 유저들이 쉽게 사용할 수 있도록 기능을 더 공부해봐야겠다.

profile
개발자로 한걸음씩!

0개의 댓글