Skip to main content

Overview

Django-allauth is designed to be secure by default, but proper configuration is essential for production deployments. This guide covers critical security settings, common vulnerabilities, and best practices.

Rate Limiting

Rate limiting is critical for preventing brute force attacks and abuse.

Enable Rate Limiting

Rate limiting requires a proper cache backend. The default DummyCache will NOT work.
settings.py

Rate Limit Format

  • amount: Number of allowed actions
  • period: Time window (s=seconds, m=minutes, h=hours, d=days)
  • scope: ip (IP address), user (authenticated user), or key (action-specific identifier)

Custom Rate Limit Handler

Customize the rate limit error response:
views.py
urls.py
templates/429.html

Client IP Detection

Critical: Rate limiting relies on accurate IP detection. Misconfiguration allows attackers to bypass rate limits entirely.

Behind a Proxy/Load Balancer

settings.py

Custom IP Detection

For complex proxy setups:
adapters.py
settings.py

Enumeration Prevention

Prevent attackers from discovering which email addresses have accounts.
settings.py

How It Works

  • Password Reset: Always shows “email sent” message, even if account doesn’t exist
  • Signup: With "strict", allows signup with existing email (only one can be verified)
  • Login: Returns generic error for both invalid username and password
Enumeration prevention adds slight UX friction (no immediate feedback) but significantly improves security.

Password Security

Password Validation

Use Django’s password validators:
settings.py

Custom Password Validation

validators.py
settings.py

Logout on Password Change

settings.py

Email Verification

Mandatory Verification

settings.py
settings.py

Token Expiration

settings.py

Session Security

Session Settings

settings.py

Remember Me Functionality

settings.py

Track User Sessions

settings.py
This allows users to:
  • View all active sessions
  • See device/location information
  • Terminate specific sessions
  • Detect unauthorized access

Reauthentication

Require password confirmation for sensitive actions:
settings.py

HTTPS Enforcement

settings.py

Login Security

Login by Code (Passwordless)

settings.py

Login Timeout

settings.py

Logout Security

settings.py

Email Security

Email Notifications

settings.py
Enables notifications for:
  • Password changes
  • Email address changes
  • New logins from unknown devices (if using usersessions)

Email Validation

adapters.py

Username Security

Username Validation

settings.py
validators.py

Case Sensitivity

settings.py

Signup Security

Honeypot Field

settings.py

Close Signup

adapters.py

Admin Protection

Django-allauth rate limiting does NOT protect the Django admin login. Protect it separately.
settings.py

Security Monitoring

Log Security Events

settings.py

Monitor Failed Logins

signals.py

Production Checklist

settings.py

Additional Recommendations

  1. Keep Dependencies Updated: Regularly update django-allauth and Django
  2. Use Security Headers: Add django-csp, django-permissions-policy
  3. Enable 2FA: Install django-allauth-2fa for two-factor authentication
  4. Monitor Logs: Set up alerts for suspicious activity
  5. Regular Security Audits: Use tools like safety and bandit
  6. Penetration Testing: Test your implementation before going live
  7. Backup Strategy: Regular backups of user data and sessions
With these security measures in place, your django-allauth implementation will be production-ready and resilient against common attacks.