● Python Backend
django-auth-react-native
Complete, production-ready Django authentication system for React Native applications. This skill should be used when building a new Django + React Native project that needs authentication, implementing JWT-based authentication with refresh tokens, adding email verification and OTP functionality, setting up password reset workflows, implementing multi-device session management, building multi-tenant SaaS applications, or migrating from session-based to token-based authentication. Provides complete backend and frontend templates with security best practices built-in.
Django Authentication for React Native
Overview
This skill provides a comprehensive, production-ready authentication system for Django backend + React Native frontend applications. It includes complete implementations for user registration, login, email verification, password reset, session management, and optional multi-tenant support.
Quick Start Workflow
Step 1: Choose Implementation Approach
Option A: Full Implementation (Recommended for new projects)
- Use all template files to set up complete authentication system
- Includes user model, views, serializers, services, and React Native integration
- Best for: New projects starting from scratch
Option B: Partial Implementation (For existing projects)
- Pick specific components you need (e.g., just OTP service or JWT setup)
- Integrate with existing user model and authentication
- Best for: Adding features to existing authentication system
Step 2: Install Dependencies
Backend Requirements:
pip install django==5.2.6
pip install djangorestframework==3.14.0
pip install djangorestframework-simplejwt==5.5.1
pip install django-cors-headers==4.3.1
pip install django-allauth==0.57.0
pip install celery==5.5.3
pip install redis==7.0.0
Frontend Requirements:
npm install @react-native-async-storage/async-storage
npm install expo-secure-store expo-device expo-constants
Step 3: Set Up Django Backend
-
Create accounts app:
python manage.py startapp accounts -
Copy template files from
assets/django_templates/:models.py.template→accounts/models.pyviews.py.template→accounts/views.pyserializers.py.template→accounts/serializers.pymiddleware.py.template→accounts/middleware.pyurls.py.template→accounts/urls.pyservices/otp_service.py.template→accounts/services/otp_service.pyservices/email_service.py.template→accounts/services/email_service.py
-
Update settings.py with JWT configuration, CORS headers, and custom user model
-
Run migrations:
python manage.py migrate
Step 4: Set Up React Native Frontend
-
Copy auth service:
assets/react_native_templates/authService.js.template→services/authService.js -
Update API URL in authService.js for your backend
-
Create Auth Context for state management
-
Implement auth screens using the auth service
Core Features
1. Custom User Model with Email Authentication
- UUID primary keys for security
- Email-based authentication (no username)
- Role-based access control (admin, manager, employee, customer)
- Profile fields (name, phone, profile picture)
- Optional multi-tenant organization support
2. JWT Token Management
- Access tokens (1 hour default)
- Refresh tokens (7 days default)
- Automatic token rotation on refresh
- Token blacklisting on logout
- Secure storage (SecureStore on mobile, AsyncStorage on web)
3. OTP Verification System
- 6-digit secure OTP generation
- Email verification flow
- Password reset flow (3-step process)
- Rate limiting (5 per hour per user, 10 per IP)
- Resend cooldown (2 minutes)
- Maximum 3 attempts per OTP
4. Session Management
- Track multiple devices per user
- Device fingerprinting (platform, model, version)
- Remote session revocation
- IP address and user agent tracking
- Active session listing
5. Security Features
- CORS configuration with platform headers
- Rate limiting middleware
- Security headers (XSS, clickjacking protection)
- Audit logging for important actions
- Password strength validation
- User enumeration prevention
API Endpoints
Authentication Core
POST /api/auth/register/- New user registrationPOST /api/auth/login/- User login with JWTPOST /api/auth/refresh/- Refresh access tokenPOST /api/auth/logout/- Logout and blacklist tokenGET /api/auth/verify/- Verify token validity
Email Verification
POST /api/auth/verify-otp/- Verify email with OTP (auto-login after verification)POST /api/auth/resend-otp/- Resend verification code
Password Reset (3-Step Process)
POST /api/auth/password-reset/request/- Step 1: Request reset (sends OTP)POST /api/auth/password-reset/verify-otp/- Step 2: Verify OTPPOST /api/auth/password-reset/confirm/- Step 3: Set new password
Profile Management
GET /api/auth/profile/- Get current user profilePUT /api/auth/profile/update/- Update profile informationPOST /api/auth/profile/change-password/- Change password (requires current password)DELETE /api/auth/profile/delete/- Delete account (soft or hard delete)
Session Management
GET /api/auth/sessions/- List all active sessionsPOST /api/auth/sessions/{id}/revoke/- Revoke specific session
React Native Integration
Using the Auth Service
import authService from './services/authService'
// Registration
const userData = {
email: 'user@example.com',
password: 'SecurePass123!',
password_confirm: 'SecurePass123!',
first_name: 'John',
last_name: 'Doe',
}
const result = await authService.register(userData)
// Login
const loginResult = await authService.login(email, password)
// Check authentication
const isAuthenticated = await authService.isAuthenticated()
// Authenticated API calls (automatic token refresh)
const response = await authService.authenticatedFetch('/api/protected-endpoint/')
// Logout
await authService.logout()
Platform-Specific Considerations
iOS:
- Uses SecureStore for encrypted token storage
- Requires keychain sharing for app groups
Android:
- Uses SecureStore with Android Keystore
- Emulator uses 10.0.2.2 for localhost
Web:
- Uses AsyncStorage (consider localStorage for production)
- Ensure CORS is properly configured
Customization Guide
Adding Social Authentication
Enable social providers in Django settings:
INSTALLED_APPS += [
'allauth.socialaccount.providers.google',
'allauth.socialaccount.providers.facebook',
'allauth.socialaccount.providers.apple',
]
SOCIALACCOUNT_PROVIDERS = {
'google': {
'APP': {
'client_id': 'your-client-id',
'secret': 'your-secret',
}
}
}
Customizing OTP Settings
In otp_service.py:
OTP_LENGTH = 6 # Change to 8 for more security
OTP_EXPIRY_MINUTES = 10 # Adjust expiry time
MAX_ATTEMPTS = 3 # Change max verification attempts
RESEND_COOLDOWN_SECONDS = 120 # Adjust cooldown period
Adding Two-Factor Authentication
- Add TOTP fields to User model
- Implement TOTP setup endpoint
- Verify TOTP on login
- Use pyotp library for TOTP generation
Troubleshooting
Common Issues and Solutions
CORS Errors:
- Add
x-platformto CORS_ALLOW_HEADERS - Include frontend URL in CORS_ALLOWED_ORIGINS
Token Refresh Failures:
- Check refresh token expiry settings
- Ensure refresh token is stored correctly
- Verify token rotation is enabled
Email Not Sending:
- Check EMAIL_BACKEND configuration
- Use app-specific passwords for Gmail
- Verify SMTP settings
Rate Limiting Issues:
- Adjust limits in RateLimitService
- Clear cache for specific users
- Check Redis connection
Security Checklist
Production Deployment
Backend:
- Set DEBUG = False
- Use environment variables for secrets
- Configure production database
- Set up Redis for caching
- Enable HTTPS only
- Configure secure CORS origins
- Set up monitoring (Sentry)
- Enable audit logging
Frontend:
- Update API_BASE_URL to production
- Remove console.log statements
- Enable code obfuscation
- Test on real devices
- Set up crash reporting
- Configure certificate pinning
Resources
Template Files
Django Templates (assets/django_templates/):
- models.py.template - Complete user model with sessions and OTP
- views.py.template - All authentication endpoints
- serializers.py.template - Request/response serializers
- middleware.py.template - JWT and security middleware
- urls.py.template - URL routing configuration
- services/otp_service.py.template - OTP generation and validation
- services/email_service.py.template - Email sending with templates
React Native Templates (assets/react_native_templates/):
- authService.js.template - Complete auth service with token management
- authContext.js.template - React context for auth state
- screens/ - Login, Register, and OTP verification screens
Scripts
Initialization Scripts (scripts/):
- init_auth.py - Initialize auth system in existing Django project
- generate_models.py - Generate custom user model code
- setup_jwt.py - Configure JWT settings automatically
Reference Documentation
API Reference (references/):
- api_endpoints.md - Complete API documentation
- security_best_practices.md - Security guidelines
- jwt_configuration.md - JWT setup details
- email_templates.md - Email template examples