Release Notes¶
Version 1.2.4¶
Released: TBD
Security¶
Encrypted TOTP setup secrets: TOTP secrets generated during MFA setup are now encrypted at rest using Fernet symmetric encryption (derived from
SECRET_KEY) before being stored in the database. Previously, secrets were stored in plaintext inGenericTokenModel. This change is fully backward compatible — any in-flight plaintext secrets from a prior version are automatically detected and handled during read.JWT signing key warning: A runtime warning is now emitted when
JWT_ALLAUTH_SECRET_KEYis not configured andDEBUG=False. Using Django’sSECRET_KEYas the JWT signing key is insecure for production — a dedicatedJWT_ALLAUTH_SECRET_KEYis strongly recommended.Reduced default refresh token lifetime from 90 days to 14 days. The previous 90-day window was excessively long in case of token leakage. Existing installations using the old
JWT_REFRESH_TOKEN_LIFETIMEsetting are not affected — it continues to work.Forced secure cookies in production: The refresh token cookie
secureflag is now forced toTruewhenDEBUG=False, regardless of theJWT_ALLAUTH_REFRESH_TOKEN_COOKIE_SECUREsetting. If the setting is explicitlyFalsewhile in production, a warning is emitted. This prevents accidental cookie exposure over plain HTTP.Rate limiting on MFA verification:
MFAVerifyViewandMFAVerifyRecoveryViewnow enforceAnonRateThrottle. Additionally, the login challenge is automatically invalidated after 5 consecutive failed verification attempts, preventing brute-force attacks on TOTP codes and recovery codes.
New Features¶
RS256 default for new projects:
jwt-allauth startprojectnow generates a 4096-bit RSA key pair and configuresSIMPLE_JWTwith RS256 asymmetric signing by default. Keys are stored in akeys/directory (excluded from version control). If key generation is not possible, the project falls back to HS256 with a commented-outJWT_ALLAUTH_SECRET_KEYplaceholder. Existing installations are not affected.Configurable refresh token cookie:
TokenRefreshViewnow reads cookie settings (httponly,secure,samesite,max_age,path) from the sameJWT_ALLAUTH_REFRESH_TOKEN_COOKIE_*settings used bybuild_token_response(), fixing an inconsistency where the refresh endpoint ignored user configuration. A newJWT_ALLAUTH_REFRESH_TOKEN_COOKIE_PATHsetting (default'/') allows restricting the cookie scope.
Deprecations¶
Settings renamed to the
JWT_ALLAUTH_*naming convention. The old names continue to work but emit aDeprecationWarningand will be removed in a future release:JWT_SECRET_KEY→JWT_ALLAUTH_SECRET_KEYJWT_ACCESS_TOKEN_LIFETIME→JWT_ALLAUTH_ACCESS_TOKEN_LIFETIMEJWT_REFRESH_TOKEN_LIFETIME→JWT_ALLAUTH_REFRESH_TOKEN_LIFETIME
Version 1.2.3¶
Released: January 25, 2026
Behavior and functionality¶
Projects generated via
jwt-allauth startprojectnow configure Django’sMIGRATION_MODULESso thatjwt_allauthmigrations are stored inside the project codebase (under<project_module>/migrations_external/jwt_allauth). This improves reliability in Docker/containerized deployments wheresite-packagesis ephemeral.
Documentation¶
Updated installation documentation to explain how to configure
MIGRATION_MODULESmanually in existing projects to persistjwt_allauthmigrations in version control.
Version 1.2.2¶
Released: December 24, 2025
Behavior and functionality¶
Admin-Managed Registration: The email confirmation link in the admin-managed registration flow is no longer single-use. It remains valid until the user successfully sets their password. This prevents issues with email security scanners (like Outlook Safe Links) consuming the token before the user can access it. The token is now automatically deleted upon successful password completion.
Configurable Verification Error Page: When an invalid or expired email verification link is accessed in the admin-managed flow, a user-friendly HTML error page is now shown instead of a 400/401 API error. This template can be customized via the EMAIL_VERIFICATION_FAILED_TEMPLATE key in JWT_ALLAUTH_TEMPLATES setting.
Version 1.2.1¶
Released: November 29, 2025
Bug Fixes¶
Minor fix: resolved MFA TOTP failures in production deployments with multiple workers or threads by removing dependency on default cache backend.
Behavior and functionality¶
MFA TOTP challenges and setup secrets are now stored server-side in the existing
GenericTokenModeldatabase table instead of Django’s default cache backend. This improves reliability in multi-worker environments without changing the public API or required settings.
Other Changes¶
Updated supported Python versions to 3.10+ (dropped 3.8 and 3.9).
Extended the
mfaextra to includefido2<2.0.0for broader hardware key support.Fixed Quick Start documentation and CI smoke test to run
python manage.py makemigrations jwt_allauthbeforemigratein projects generated viajwt-allauth startproject, avoiding migration errors involving theJAUsermodel.
Version 1.2.0¶
Released: November 17, 2025
New Features¶
- MFA TOTP: Added REST endpoints for TOTP-based multi-factor authentication using
django-allauthMFA: POST /mfa/setup/: returns provisioning URI (otpauth), secret, and QR code (SVG)POST /mfa/activate/: activates TOTP and returns recovery codesPOST /mfa/verify/: completes login when MFA is requiredPOST /mfa/verify-recovery/: completes login using one-time recovery codesPOST /mfa/deactivate/: disables TOTP for the current userGET /mfa/authenticators/: lists user authenticators
Requires enabling
allauth.mfain your projectINSTALLED_APPSand running migrations. Configurable viaJWT_ALLAUTH_MFA_TOTP_MODEsetting with three modes:'disabled'(default): MFA TOTP is disabled'optional': Users can enable MFA TOTP but it’s not required for login'required': Users must enable MFA TOTP and provide TOTP code during login
- MFA TOTP: Added REST endpoints for TOTP-based multi-factor authentication using
- Admin-Managed User Registration: New registration flow controlled via
JWT_ALLAUTH_ADMIN_MANAGED_REGISTRATIONsetting. When enabled: Self-registration endpoint is disabled
Only users with allowed roles (configurable via
JWT_ALLAUTH_REGISTRATION_ALLOWED_ROLES) can register new usersNew
/user-register/endpoint for admin registrationInvited users set their own password via email verification link before gaining access
No authentication tokens issued during registration; one-time password setup token issued after email verification
- Admin-Managed User Registration: New registration flow controlled via
Version 1.1.1¶
Released: October 11, 2025
Breaking Change¶
JWT_ALLAUTH_USER_ATTRIBUTESnow expects a dictionary mapping output claim names to user attribute paths (e.g.,{"organization_id": "organization.id"}) instead of a list of paths. This change prevents duplicate final attribute names (e.g., multipleidkeys) in JWT payloads. The previous list format is still accepted for backward compatibility, but it is deprecated and may be removed in a future release.
Version 1.1.0¶
Released: October 7, 2025
New Features¶
Added support for including additional user attributes in refresh tokens via the
JWT_ALLAUTH_USER_ATTRIBUTESsetting, allowing flexible configuration of user data included in JWT payloads while maintaining the existing role assignment logic.
Bug Fixes¶
Fixed API endpoints that incorrectly required refresh token in request payload when
JWT_ALLAUTH_REFRESH_TOKEN_AS_COOKIEwas enabled, now properly extracting refresh tokens from cookies when configured.Fixed a bug that caused migrations not to run correctly in some situations.
Version 1.0.3¶
Released: August 5, 2025
New Features¶
New
load_user()decorator that loads the complete user object from the database for stateless JWT authentication.Added
JWT_ALLAUTH_COLLECT_USER_AGENTsetting to control user agent data collection during token refresh.Added support for refresh tokens via HTTP cookies with the new
JWT_ALLAUTH_REFRESH_TOKEN_AS_COOKIEsetting.Enhanced token refresh security by moving user agent data collection from request payload to server-side context.
Compatibility with
django-allauth65.10.0,djangorestframework-simplejwt5.5.1, anddjangorestframework3.16.0.
Bug Fixes¶
Improved security for token refresh operations
Fixed a bug that caused migrations not to run correctly in some situations.
Version 1.0.2¶
Released: April 16, 2025
This release introduces significant improvements to the role management system and authentication configuration.
New Features¶
Added automatic role assignment in
UserManager:create_superusernow automatically sets the role toSTAFF_CODEcreate_userautomatically assigns roles based on user flags:STAFF_CODEfor staff usersSUPER_USER_CODEfor superusers
Added database constraints to ensure role consistency:
Staff users must have
STAFF_CODEroleSuperusers must have
SUPER_USER_CODErole
Minor Bug Fixes¶
Automatic configuration of
DEFAULT_AUTHENTICATION_CLASSESwas not working when using addiotionalREST_FRAMEWORKsettings.