Skip to main content

Comprehensive Django REST Framework library for OAuth social login

Project description

README.md

DRF Social OAuth

A highly extensible Django REST Framework library for OAuth social login with customizable providers and handlers.

✨ Features

  • 🔐 Multiple OAuth Providers: Google, Facebook, GitHub, Twitter out of the box
  • 🎛️ Highly Customizable: Custom providers, handlers, and response formats
  • 🏗️ DRF Native: Built with ViewSets, Serializers, and proper REST patterns
  • 🔑 Multiple Auth Types: JWT, Sessions, DRF Tokens supported
  • 🛡️ Security First: CSRF protection, proper error handling, secure defaults
  • 📊 Admin Integration: Django admin interface for social accounts
  • 🧪 Well Tested: Comprehensive test suite with high coverage
  • 📚 Great Documentation: Detailed docs with examples

🚀 Quick Start

Installation

pip install drf-oauth2-tools

Basic Setup

  1. Add to your INSTALLED_APPS:
INSTALLED_APPS = [
    # ... other apps
    'rest_framework',
    'drf_oauth2',
]
  1. Configure OAuth providers in settings.py:
OAUTH_PROVIDERS = {
    'GOOGLE': {
        'CLIENT_ID': 'your-google-client-id',
        'CLIENT_SECRET': 'your-google-client-secret',
    },
    'GITHUB': {
        'CLIENT_ID': 'your-github-client-id',
        'CLIENT_SECRET': 'your-github-client-secret',
    },
}
  1. Add URLs to your urls.py:
from django.urls import path, include

urlpatterns = [
    path('api/auth/', include('drf_oauth2.urls')),
]
  1. Run migrations:
python manage.py migrate

🎯 Usage

API Endpoints

GET  /api/auth/oauth/login/google/        # Initiate Google OAuth
GET  /api/auth/oauth/callback/google/     # Handle OAuth callback

Frontend Integration

// Get authorization URL
const response = await fetch('/api/auth/oauth/login/google/');
const data = await response.json();

// Redirect user to OAuth provider
window.location.href = data.authorization_url;

// After callback, you'll receive JWT tokens

🔧 Advanced Configuration

Custom Callback Handler

from drf_oauth2.handlers import BaseCallbackHandler

class CustomHandler(BaseCallbackHandler):
    def handle_callback(self, user_info, tokens, provider, request=None):
        user = self.get_or_create_user(user_info, provider)
        return {
            'success': True,
            'user_id': user.id,
            'custom_data': 'your custom response'
        }

# Configure in settings
OAUTH_PROVIDERS = {
    'GOOGLE': {
        'CLIENT_ID': 'your-client-id',
        'CLIENT_SECRET': 'your-client-secret',   
    },
    "CALLBACK_HANDLER_CLASS": 'myapp.handlers.CustomHandler',
}

Custom OAuth Provider

from drf_oauth2.providers import BaseOAuthProvider, register_provider

class LinkedInProvider(BaseOAuthProvider):
    PROVIDER = "linkedin"
    AUTHORIZATION_URL = "https://www.linkedin.com/oauth/v2/authorization"
    
    # ... implement other required methods

# Configure in settings
OAUTH_PROVIDERS = {
    'LINKEDIN': {
        'CLIENT_ID': 'your-client-id',
        'CLIENT_SECRET': 'your-client-secret',
        "PROVIDER_CLASS": "myapp.providers.linkedin.LinkedInProvider'
    },
}

📋 Supported Providers

  • Google - google
  • Facebook - facebook
  • GitHub - github
  • Twitter - twitter
  • Custom providers - Easy to add

🔐 Supported Authentication Types

  • JWT Tokens (via djangorestframework-simplejwt) (DEFAULT)
  • Django Sessions
  • DRF Tokens
  • Custom handlers

📝 License

This project is licensed under the MIT License - see the LICENSE file for details.

🙏 Acknowledgments

  • Django REST Framework team
  • OAuth provider documentation
  • Contributors and users

Made with ❤️ by AstralMortem

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

drf_oauth2_tools-1.0.2.tar.gz (10.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

drf_oauth2_tools-1.0.2-py3-none-any.whl (14.8 kB view details)

Uploaded Python 3

File details

Details for the file drf_oauth2_tools-1.0.2.tar.gz.

File metadata

  • Download URL: drf_oauth2_tools-1.0.2.tar.gz
  • Upload date:
  • Size: 10.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for drf_oauth2_tools-1.0.2.tar.gz
Algorithm Hash digest
SHA256 a83c5c8790364d6778a25ec6ee1809bbeb0d1b7b6875a0ffbbb2123191fe4840
MD5 1c3d660713ea6da9bad287ca0eee55c0
BLAKE2b-256 bcaec1c735c46cb5d181098ccf1588d9b91f21bd3c67f91ce2258b32b22bbc18

See more details on using hashes here.

Provenance

The following attestation bundles were made for drf_oauth2_tools-1.0.2.tar.gz:

Publisher: release.yaml on AstralMortem/drf-oauth2-tools

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file drf_oauth2_tools-1.0.2-py3-none-any.whl.

File metadata

File hashes

Hashes for drf_oauth2_tools-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 866dd8efd8135b84149741b670f11a5942737f9b2726ffb37b40111968b108c2
MD5 17a33de2f7add0801711cf75beffb740
BLAKE2b-256 8ac3be95c2f3ebb71c8f5583f86fd0306b489a67c0e88183e9f7f60a6ac8e040

See more details on using hashes here.

Provenance

The following attestation bundles were made for drf_oauth2_tools-1.0.2-py3-none-any.whl:

Publisher: release.yaml on AstralMortem/drf-oauth2-tools

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page