>  기사  >  백엔드 개발  >  Python 서버 프로그래밍: django-allauth를 사용하여 OAuth 인증 구현

Python 서버 프로그래밍: django-allauth를 사용하여 OAuth 인증 구현

王林
王林원래의
2023-06-18 11:27:071438검색

사용자 인증 및 권한 부여는 현대 인터넷 애플리케이션에서 매우 중요한 요소입니다. OAuth(Open Authorization) 프로토콜은 현대 인터넷 개발에서 가장 일반적으로 사용되는 인증 및 권한 부여 프로토콜 중 하나입니다. 이 기사에서는 Python의 웹 프레임워크 Django와 django-allauth라는 패키지를 사용하여 OAuth 인증을 구현하는 방법을 소개합니다.

Django는 Python으로 작성된 무료 오픈 소스 웹 애플리케이션 프레임워크로, 개발자가 고품질 웹 애플리케이션을 빠르게 구축할 수 있도록 도와줍니다. django-allauth는 개발자에게 소셜 인증, OAuth, OpenID 및 이메일 인증과 같은 기능을 제공하는 Django 패키지입니다.

먼저 Django와 django-allauth를 설치해야 합니다. pip 도구를 사용하여 설치할 수 있으며 명령은 다음과 같습니다.

pip install django
pip install django-allauth

설치가 완료된 후 Django 애플리케이션의 settings.py 파일에 django-allauth 구성 정보를 추가해야 합니다. 파일 하단에 다음을 추가합니다:

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

AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
    'allauth.account.auth_backends.AuthenticationBackend',
]

SITE_ID = 1
LOGIN_REDIRECT_URL = '/'
ACCOUNT_EMAIL_VERIFICATION = 'none'
SOCIALACCOUNT_QUERY_EMAIL = True
SOCIALACCOUNT_PROVIDERS = {
    'google': {
        'SCOPE': ['profile', 'email'],
        'AUTH_PARAMS': {'access_type': 'online'},
    },
}

위 구성에서는 Django에 대한 모든 인증 플러그인과 소셜 플러그인을 활성화하고 Google을 OAuth 공급자로 설정했습니다.

뷰에 OAuth 인증 추가:
이제 뷰에 OAuth 인증 기능을 추가해야 합니다. "login"이라는 뷰를 만들고 여기에 다음 코드를 추가합니다.

from allauth.socialaccount.models import SocialAccount
from django.contrib.auth import login
from django.contrib.auth.decorators import login_required
from django.shortcuts import redirect, render

@login_required
def login(request):
    social_account = SocialAccount.objects.filter(user=request.user).first()

    if social_account:
        return redirect('/')
        
    social_login = request.session.get('sociallogin')
    
    if social_login:
        if social_login.account.provider == 'google':
            social_account = SocialAccount(
                user=request.user, 
                provider=social_login.account.provider, 
                uid=social_login.account.uid, 
                extra_data=social_login.account.extra_data, 
            )
            social_account.save()
            return redirect('/')
            
    context = {
        'google_login_url': '/accounts/google/login/',
    }
    
    return render(request, 'login.html', context)

이 뷰의 코드에서는 먼저 사용자가 연결된 소셜 계정이 있는지 확인하고, 있으면 홈페이지로 직접 리디렉션합니다. 사용자가 소셜 계정과 연결되어 있지 않은 경우 사용자 세션에 OAuth 정보가 바인딩되어 있는지 확인하세요.

있는 경우 OAuth 정보가 Google 계정에 속하는지 확인하고 SocialAccount 개체로 저장합니다. 바인딩이 없으면 Google 로그인 URL과 템플릿이 포함된 사전을 반환합니다.

마지막으로 사용자가 클릭하여 OAuth 인증을 시작할 수 있도록 템플릿 login.html에 URL을 추가해야 합니다. 여기서는 "google_login_url"이라는 변수가 사용되므로 이를 템플릿 컨텍스트에 배치합니다. 템플릿 코드는 다음과 같습니다.

{% extends 'base.html' %}

{% block content %}
    <h1>Login</h1>
    <p>Please login with your Google account.</p>
    <a href="{{ google_login_url }}">Google Login</a>
{% endblock %}

마지막으로 프로젝트의 urls.py 파일에 OAuth 인증 URL 패턴을 추가해야 합니다. 파일 하단에 다음을 추가하세요.

from django.urls import include, path
from django.contrib import admin

urlpatterns = [
    path('admin/', admin.site.urls),
    path('accounts/', include('allauth.urls')),
    path('', login, name='login'),
]

이제 OAuth 인증 기능이 완성되었습니다. Django 서버를 실행하고 브라우저에서 보기에 액세스할 수 있습니다. 그러면 사용자 승인을 요청하기 위해 Google의 OAuth 인증 페이지로 이동합니다.

사용자가 승인하면 Django 애플리케이션으로 돌아가 홈페이지로 리디렉션됩니다. 이제 데이터베이스에는 이 사용자에 대한 OAuth 정보가 포함된 새로운 SocialAccount 레코드가 있습니다.

이 글을 통해 Django 애플리케이션에서 OAuth 인증을 구현하는 방법을 소개합니다. django-allauth를 사용하는 것은 매우 간단하며 인증을 수행하기 위해 약간의 설정만 필요합니다. 이 기사가 인증 및 승인을 위해 OAuth를 사용하는 방법을 찾고 있는 사람들에게 큰 도움이 되기를 바랍니다.

위 내용은 Python 서버 프로그래밍: django-allauth를 사용하여 OAuth 인증 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.