[파이썬] Django를 이용한 소셜 미디어 인증

소셜 미디어 인증은 사용자가 다른 웹 사이트에서 로그인할 때 소셜 미디어 계정을 사용하는 기능을 말합니다. 대부분의 웹 사이트에서는 Facebook, Google, Twitter 등의 소셜 미디어 계정을 이용한 로그인이 일반적입니다. 본 글에서는 Django를 사용하여 소셜 미디어 인증 기능을 구현하는 방법을 알아보겠습니다.

구현 단계

  1. Django 프로젝트 설정
  2. 소셜 미디어 애플리케이션 등록
  3. Django-allauth 설치 및 설정
  4. 소셜 미디어 로그인 뷰 및 URL 설정
  5. 소셜 미디어 인증 템플릿 작성
  6. 유저 정보 활용 및 처리

1. Django 프로젝트 설정

먼저, Django 프로젝트를 생성하고 필요한 설정을 추가합니다. Django 프로젝트를 구성하기 위해서는 djangodjango-allauth 패키지를 설치해야 합니다.

$ pip install django django-allauth

2. 소셜 미디어 애플리케이션 등록

각 소셜 미디어 제공자마다 애플리케이션을 등록해야 합니다. 각각의 소셜 미디어 제공자의 개발자 문서를 참고하여 애플리케이션을 등록하세요. 애플리케이션 등록시 발급받을 클라이언트 ID와 시크릿 키는 Django 설정 파일에 추가할 것입니다.

3. Django-allauth 설치 및 설정

Django-allauth 패키지는 Django에서 소셜 미디어 인증에 필요한 기능을 제공합니다. Django-allauth를 설치하고 설정하세요.

INSTALLED_APPS = [
    ...
    'django.contrib.sites',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'allauth.socialaccount.providers.google',
    'allauth.socialaccount.providers.facebook',
    'allauth.socialaccount.providers.twitter',
]

AUTHENTICATION_BACKENDS = [
    ...
    'allauth.account.auth_backends.AuthenticationBackend',
]

SITE_ID = 1

LOGIN_REDIRECT_URL = '/'
SOCIALACCOUNT_QUERY_EMAIL = True
SOCIALACCOUNT_PROVIDERS = {
    'google': {
        'APP': {
            'client_id': 'YOUR_GOOGLE_CLIENT_ID',
            'secret': 'YOUR_GOOGLE_SECRET_KEY',
            'key': ''
        }
    },
    'facebook': {
        'APP': {
            'client_id': 'YOUR_FB_CLIENT_ID',
            'secret': 'YOUR_FB_SECRET_KEY',
            'key': ''
        }
    },
    'twitter': {
        'APP': {
            'client_id': 'YOUR_TWITTER_CLIENT_ID',
            'secret': 'YOUR_TWITTER_SECRET_KEY',
            'key': ''
        }
    },
}

4. 소셜 미디어 로그인 뷰 및 URL 설정

Django의 뷰와 URL을 설정하여 소셜 미디어로 로그인할 수 있는 기능을 추가합니다. 다음은 Google, Facebook, Twitter로 로그인하는 예시입니다.

from allauth.socialaccount.views import SignupView
from allauth.socialaccount.providers.oauth2.urls import default_urlpatterns

urlpatterns += [
    path('accounts/', include('allauth.urls')),
    path(
        'accounts/signup',
        SignupView.as_view(template_name='accounts/signup.html'),
        name='signup'
    ),
    path('accounts/social/', include(default_urlpatterns))
]

5. 소셜 미디어 인증 템플릿 작성

인증에 성공했을 때 보여줄 템플릿을 작성합니다. allauth의 기본 템플릿을 커스터마이징하여 만들 수도 있습니다.


{% extends 'base.html' %}
{% load socialaccount %}

{% block content %}
  <h2>소셜 미디어 인증 테스트</h2>
  <a href="{% provider_login_url 'google' %}">Google 로그인</a>
  <a href="{% provider_login_url 'facebook' %}">Facebook 로그인</a>
  <a href="{% provider_login_url 'twitter' %}">Twitter 로그인</a>
{% endblock %}

6. 유저 정보 활용 및 처리

로그인에 성공하면, 해당 소셜 미디어 제공자로부터 받은 유저 정보를 활용할 수 있습니다. 예를 들어, 사용자가 프로필을 수정하는 페이지에서 소셜 미디어로 로그인한 사용자 정보를 보여주고 수정할 수 있습니다.

from allauth.socialaccount.models import SocialAccount

def profile_view(request):
    social_account = SocialAccount.objects.filter(user=request.user).first()
    if social_account:
        provider = social_account.provider
        uid = social_account.uid
        extra_data = social_account.extra_data
        # 유저 정보 활용 및 처리
        ...
    ...

Django를 이용한 소셜 미디어 인증 기능을 구현하는 방법에 대해 알아보았습니다. 소셜 미디어 인증은 사용자의 편의성을 높이고, 로그인 과정을 간소화하는 장점이 있습니다. Django-allauth 패키지의 다양한 기능을 활용하여 소셜 미디어 인증을 구현해 보세요.