一键导入
django-allauth
Django authentication - local accounts, social OAuth, registration, email verification, MFA, session management
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Django authentication - local accounts, social OAuth, registration, email verification, MFA, session management
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Develop C++ plugins for Kate text editor using KTextEditor Framework, CMake with ECM, Qt threading, and KDE plugin architecture
Develop plugins, tools, and extensions for OpenCode AI coding agent with MCP, LSP integration, custom tools, and SDK usage
Django security - CSRF protection, authentication, sessions, login/logout, password handling, middleware, protected views
Python testing framework with powerful fixtures, parametrization, extensive plugin ecosystem, and support for async, Django, Flask testing
Python SQL toolkit and ORM with expressive query API, relationship mapping, async support, and Alembic migrations
Common Rust development pitfalls: frequent compiler errors, struct constructor patterns, test organization, and coverage enforcement for reliable codebases.
| name | django-allauth |
| description | Django authentication - local accounts, social OAuth, registration, email verification, MFA, session management |
| metadata | {"author":"mte90","version":"1.0.0","tags":["python","django","authentication","oauth","social-login","mfa","django-allauth"]} |
Django authentication package.
django-allauth is a reusable Django app for local and social authentication. It handles signup, login, logout, email verification, and integrates with many OAuth providers.
Key Features:
pip install django-allauth
# With optional dependencies
pip install django-allauth[socialaccount]
pip install django-allauth[mfa]
INSTALLED_APPS = [
# Required apps
'django.contrib.auth',
'django.contrib.messages',
'django.contrib.sites',
# allauth
'allauth',
'allauth.account',
'allauth.socialaccount',
]
# Authentication backends
AUTHENTICATION_BACKENDS = [
'allauth.account.auth_backends.AuthenticationBackend',
]
# Site ID
SITE_ID = 1
# allauth settings
ACCOUNT_AUTHENTICATION_METHOD = 'email' # or 'username'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_EMAIL_VERIFICATION = 'mandatory' # or 'optional', 'none'
LOGIN_REDIRECT_URL = '/'
ACCOUNT_LOGOUT_REDIRECT_URL = '/'
from django.urls import path, include
urlpatterns = [
path('accounts/', include('allauth.urls')),
]
# views.py
from allauth.account.views import SignupView
# Uses built-in signup form
# POST /accounts/signup/
# POST /accounts/login/
# Uses built-in login form
# With remember me
# POST /accounts/login/ with remember=true
# POST /accounts/logout/
# Clears session
# Password change: POST /accounts/password/change/
# Password set: POST /accounts/password/set/
# Password reset: POST /accounts/password/reset/
# Password reset confirm: POST /accounts/password/reset/confirm/
# Email backend
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
# allauth email settings
ACCOUNT_EMAIL_NOTIFICATIONS = True
EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL = '/'
EMAIL_CONFIRMATION_ANONYMOUS_REDIRECT_URL = '/'
templates/account/email/
├── email_confirmation_subject.txt
├── email_confirmation_message.txt
├── email_confirmation_signup_message.txt
├── password_reset_key_message.txt
└── ...
from allauth.account.models import EmailAddress
# Get user's verified emails
emails = EmailAddress.objects.filter(
user=user,
verified=True
)
# Send via allauth adapter
from allauth.account.adapter import get_adapter
adapter = get_adapter()
adapter.send_mail(
'account/email/custom_subject.txt',
user,
{'context': 'variables'},
[user.email]
)
# settings.py
INSTALLED_APPS += [
'allauth.socialaccount.providers.google',
]
# Social app in admin:
# Add SocialApp with Google provider
# Client ID and Secret from Google Cloud Console
INSTALLED_APPS += [
'allauth.socialaccount.providers.github',
]
# myapp/providers.py
from allauth.socialaccount.providers.base import Provider
from allauth.socialaccount.providers.oauth2.provider import ProviderMixin
class MyCustomProvider(ProviderMixin, Provider):
pass
# myapp/app_settings.py
from allauth.socialaccount import app_settings
provider_classes = [
'myapp.providers.MyCustomProvider',
]
# settings.py
SOCIALACCOUNT_PROVIDERS = {
'custom': {
'APP': {
'client_id': 'xxx',
'secret': 'xxx',
'key': ''
}
}
}
SOCIALACCOUNT_PROVIDERS = {
'google': {
'APP': {
'client_id': 'xxx',
'secret': 'xxx',
},
'SCOPE': ['profile', 'email'],
'AUTH_PARAMS': {'access_type': 'online'},
},
'github': {
'APP': {
'client_id': 'xxx',
'secret': 'xxx',
},
'SCOPE': ['user:email'],
},
}
INSTALLED_APPS += [
'allauth.mfa',
]
# Settings
MFA_ENABLED = True
MFA_SUPPORTED_AUTHENTICATORS = [
'allauth.mfa.authenticators.Totp',
'allauth.mfa.authenticators.WebAuthn',
'allauth.mfa.authenticators.RecoveryCodes',
]
# Users can set up TOTP via
# GET /mfa/totp/create/
# POST /mfa/totp/activate/
# WebAuthn/fido2 setup
# GET /mfa/webauthn/create/
# POST /mfa/webauthn/activate/
# Generate recovery codes
# GET /mfa/recovery_codes/generate/
INSTALLED_APPS += [
'allauth.headless',
]
# Settings
ALLAUTH_HEADLESS_ENABLED = True
ALLAUTH_HEADLESS_TOKEN_STRATEGY = 'allauth.headless.token.StrategyJWT'
ALLAUTH_HEADLESS_TOKEN_JWT_SECRET_KEY = 'your-secret'
ALLAUTH_HEADLESS_TOKEN_JWT_ALGORITHM = 'HS256'
# Signup
POST /headless/signup/
{"email": "user@example.com", "password": "password"}
# Login
POST /headless/authentication/login/
{"email": "user@example.com", "password": "password"}
# Logout
POST /headless/authentication/logout/
# Get current user
GET /headless/users/me/
# Manage emails
GET/POST/DELETE /headless/emails/
# Manage passwords
POST /headless/password/set/
POST /headless/password/change/
POST /headless/password/reset/
# JWT
ALLAUTH_HEADLESS_TOKEN_STRATEGY = 'allauth.headless.token.StrategyJWT'
# Session-based
ALLAUTH_HEADLESS_TOKEN_STRATEGY = 'allauth.headless.token.StrategySession'
# myapp/adapter.py
from allauth.account.adapter import DefaultAccountAdapter
class CustomAccountAdapter(DefaultAccountAdapter):
def is_open_for_signup(self, request):
return True # Allow signup
def send_mail(self, template_prefix, email_context, users):
# Custom email sending
pass
def get_email_confirmation_redirect_url(self, request):
return '/confirmed/'
def authenticate(self, request, **credentials):
# Custom authentication
return super().authenticate(request, **credentials)
# settings.py
ACCOUNT_ADAPTER = 'myapp.adapter.CustomAccountAdapter'
# myapp/adapter.py
from allauth.socialaccount.adapter import DefaultSocialAccountAdapter
class CustomSocialAccountAdapter(DefaultSocialAccountAdapter):
def pre_social_login(self, request, sociallogin):
# Called after login, before creating user
pass
def populate_user(self, request, sociallogin, data):
# Populate user fields
user = sociallogin.user
user.first_name = data.get('first_name', '')
user.last_name = data.get('last_name', '')
return user
# settings.py
SOCIALACCOUNT_ADAPTER = 'myapp.adapter.CustomSocialAccountAdapter'
from allauth.account import signals
# User signs up
signals.user_signed_up.connect(my_handler, sender=User)
# User logs in
signals.user_logged_in.connect(my_handler, sender=User)
# Email added
signals.email_added.connect(my_handler, sender=User)
# Email confirmed
signals.email_confirmed.connect(my_handler, sender=User)
# Password changed
signals.password_changed.connect(my_handler, sender=User)
# Password reset
signals.password_reset.connect(my_handler, sender=User)
from allauth.socialaccount import signals
# Social login successful
signals.social_login.connect(my_handler, sender=SocialLogin)
# Social account added
signals.social_account_added.connect(my_handler, sender=SocialAccount)
# Social account removed
signals.social_account_removed.connect(my_handler, sender=SocialAccount)
# Pre-update
signals.pre_update.connect(my_handler, sender=SocialAccount)
from allauth.mfa import signals
# MFA enabled
signals.mfa_enabled.connect(my_handler, sender=User)
# MFA disabled
signals.mfa_disabled.connect(my_handler, sender=User)
# Authenticator created
signals.authenticator_created.connect(my_handler, sender=User)
templates/
├── account/
│ ├── base.html
│ ├── login.html
│ ├── signup.html
│ ├── logout.html
│ ├── password_change.html
│ ├── password_reset.html
│ ├── password_set.html
│ ├── email/
│ │ ├── email_confirmation_subject.txt
│ │ └── email_confirmation_message.txt
│ └── snippets/
│ └── form.html
├── socialaccount/
│ ├── base.html
│ ├── login.html
│ ├── signup.html
│ ├── connections.html
│ └── snippets/
│ └── provider_list.html
└── mfa/
├── index.html
├── totp.html
└── webauthn.html
{% load allauth_tags %}
{# Check if user is verified #}
{% user_verified request.user %}
{# Social account connections #}
{% socialaccount_providers %}
{# Login URL #}
{% provider_login_url "google" %}
# Instead of modifying allauth, use adapter
ACCOUNT_ADAPTER = 'myapp.adapter.CustomAccountAdapter'
# In production
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
# Allauth has rate limiting built-in
ACCOUNT_RATE_LIMITS = {
'signup': '5/hour',
'password_reset': '3/hour',
}
# Require verification
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
# Or optional
ACCOUNT_EMAIL_VERIFICATION = 'optional'
# forms.py
from allauth.account.forms import SignupForm
class CustomSignupForm(SignupForm):
first_name = forms.CharField(max_length=30)
last_name = forms.CharField(max_length=30)
def save(self, request):
user = super().save(request)
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.save()
return user
# views.py
from allauth.account.views import SignupView
from .forms import CustomSignupForm
class CustomSignupView(SignupView):
form_class = CustomSignupForm
# urls.py
path('accounts/signup/', CustomSignupView.as_view(), name='account_signup')
# myapp/middleware.py
from django.shortcuts import redirect
from allauth.account.models import EmailAddress
def verified_email_required(get_response):
def middleware(request):
if request.user.is_authenticated:
email = EmailAddress.objects.filter(
user=request.user,
verified=True
).exists()
if not email:
return redirect('/accounts/verify-email/')
return get_response(request)
return middleware
# settings.py
MIDDLEWARE += ['myapp.middleware.verified_email_required']