Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-django-allauth for
openSUSE:Factory checked in at 2026-04-04 19:06:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-django-allauth (Old)
and /work/SRC/openSUSE:Factory/.python-django-allauth.new.21863 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-django-allauth"
Sat Apr 4 19:06:55 2026 rev:17 rq:1344468 version:65.15.1
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-django-allauth/python-django-allauth.changes
2026-03-23 17:12:06.118514390 +0100
+++
/work/SRC/openSUSE:Factory/.python-django-allauth.new.21863/python-django-allauth.changes
2026-04-04 19:08:53.940769802 +0200
@@ -1,0 +2,13 @@
+Fri Apr 3 12:50:22 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 65.15.1:
+ * The context data for the various entrance views was
+ inconsistent, e.g. some where missing site or login_url.
+ Ensured all entrance views are now handed over the same base
+ context.
+ * MFA: accessing the WebAuthn login view while already being
+ authenticated resulted in a 500, fixed.
+ * OAuth 1.0: Fixed an argument call order issue when performing
+ requests.
+
+-------------------------------------------------------------------
Old:
----
django_allauth-65.15.0.tar.gz
New:
----
django_allauth-65.15.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-django-allauth.spec ++++++
--- /var/tmp/diff_new_pack.TTZONp/_old 2026-04-04 19:08:54.488792271 +0200
+++ /var/tmp/diff_new_pack.TTZONp/_new 2026-04-04 19:08:54.488792271 +0200
@@ -38,7 +38,7 @@
%{?sle15_python_module_pythons}
Name: python-django-allauth
-Version: 65.15.0
+Version: 65.15.1
Release: 0
Summary: Django authentication, registration, account management
License: MIT
++++++ django_allauth-65.15.0.tar.gz -> django_allauth-65.15.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_allauth-65.15.0/.gitignore
new/django_allauth-65.15.1/.gitignore
--- old/django_allauth-65.15.0/.gitignore 2026-03-05 16:24:18.000000000
+0100
+++ new/django_allauth-65.15.1/.gitignore 2026-04-02 10:59:04.000000000
+0200
@@ -45,3 +45,5 @@
# pre-commit
.pre-commit-config.yaml
+/.agent-shell/
+.venv
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_allauth-65.15.0/ChangeLog.rst
new/django_allauth-65.15.1/ChangeLog.rst
--- old/django_allauth-65.15.0/ChangeLog.rst 2026-03-09 14:26:25.000000000
+0100
+++ new/django_allauth-65.15.1/ChangeLog.rst 2026-04-02 11:13:16.000000000
+0200
@@ -1,4 +1,4 @@
-65.15.0 (2025-03-09)
+65.15.1 (2026-04-02)
********************
.. note::
@@ -7,6 +7,23 @@
Please consider supporting its continued development by becoming a sponsor
at
https://allauth.org/sponsors/. Your support helps keep this project
thriving!
+
+Fixes
+-----
+
+- The context data for the various entrance views was inconsistent, e.g. some
+ where missing ``site`` or ``login_url``. Ensured all entrance views are now
+ handed over the same base context.
+
+- MFA: accessing the WebAuthn login view while already being authenticated
resulted
+ in a 500, fixed.
+
+- OAuth 1.0: Fixed an argument call order issue when performing requests.
+
+
+65.15.0 (2026-03-09)
+********************
+
Note worthy changes
-------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_allauth-65.15.0/PKG-INFO
new/django_allauth-65.15.1/PKG-INFO
--- old/django_allauth-65.15.0/PKG-INFO 2026-03-09 14:43:55.937676700 +0100
+++ new/django_allauth-65.15.1/PKG-INFO 2026-04-02 11:16:36.305707700 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: django-allauth
-Version: 65.15.0
+Version: 65.15.1
Summary: Integrated set of Django applications addressing authentication,
registration, account management as well as 3rd party (social) account
authentication.
Author-email: Raymond Penners <[email protected]>
License: MIT
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_allauth-65.15.0/allauth/__init__.py
new/django_allauth-65.15.1/allauth/__init__.py
--- old/django_allauth-65.15.0/allauth/__init__.py 2026-03-09
14:29:35.000000000 +0100
+++ new/django_allauth-65.15.1/allauth/__init__.py 2026-04-02
11:13:16.000000000 +0200
@@ -8,7 +8,7 @@
"""
-VERSION = (65, 15, 0, "final", 0)
+VERSION = (65, 15, 1, "final", 0)
__title__ = "django-allauth"
__version_info__ = VERSION
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django_allauth-65.15.0/allauth/account/internal/templatekit.py
new/django_allauth-65.15.1/allauth/account/internal/templatekit.py
--- old/django_allauth-65.15.0/allauth/account/internal/templatekit.py
1970-01-01 01:00:00.000000000 +0100
+++ new/django_allauth-65.15.1/allauth/account/internal/templatekit.py
2026-04-01 23:49:17.000000000 +0200
@@ -0,0 +1,70 @@
+from typing import Any
+
+from django.contrib.auth import REDIRECT_FIELD_NAME
+from django.contrib.sites.shortcuts import get_current_site
+from django.http import HttpRequest
+from django.urls import NoReverseMatch, reverse
+
+from allauth import app_settings as allauth_settings
+from allauth.account import app_settings
+from allauth.account.utils import passthrough_next_redirect_url
+
+
+def get_entrance_context_data(request: HttpRequest) -> dict[str, Any]:
+ passkey_login_enabled = False
+ passkey_signup_enabled = False
+ if allauth_settings.MFA_ENABLED:
+ from allauth.mfa import app_settings as mfa_settings
+
+ passkey_login_enabled = mfa_settings.PASSKEY_LOGIN_ENABLED
+ passkey_signup_enabled = mfa_settings.PASSKEY_SIGNUP_ENABLED
+
+ ret: dict[str, Any] = {}
+ signup_url = None
+ if not allauth_settings.SOCIALACCOUNT_ONLY:
+ try:
+ signup_url = passthrough_next_redirect_url(
+ request,
+ reverse("account_signup"),
+ REDIRECT_FIELD_NAME,
+ )
+ except NoReverseMatch:
+ # There may project specific tweaks other than
+ # SOCIALACCOUNT_ONLY ...
+ pass
+ site = get_current_site(request)
+ login_url = passthrough_next_redirect_url(
+ request,
+ reverse("account_login"),
+ REDIRECT_FIELD_NAME,
+ )
+
+ signup_by_passkey_url = None
+ if passkey_signup_enabled:
+ signup_by_passkey_url = passthrough_next_redirect_url(
+ request,
+ reverse("account_signup_by_passkey"),
+ REDIRECT_FIELD_NAME,
+ )
+
+ ret.update(
+ {
+ "signup_url": signup_url,
+ "signup_by_passkey_url": signup_by_passkey_url,
+ "login_url": login_url,
+ "site": site,
+ "SOCIALACCOUNT_ENABLED": allauth_settings.SOCIALACCOUNT_ENABLED,
+ "SOCIALACCOUNT_ONLY": allauth_settings.SOCIALACCOUNT_ONLY,
+ "LOGIN_BY_CODE_ENABLED": app_settings.LOGIN_BY_CODE_ENABLED,
+ "PASSKEY_LOGIN_ENABLED": passkey_login_enabled,
+ "PASSKEY_SIGNUP_ENABLED": passkey_signup_enabled,
+ }
+ )
+ if app_settings.LOGIN_BY_CODE_ENABLED:
+ request_login_code_url = passthrough_next_redirect_url(
+ request,
+ reverse("account_request_login_code"),
+ REDIRECT_FIELD_NAME,
+ )
+ ret["request_login_code_url"] = request_login_code_url
+ return ret
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_allauth-65.15.0/allauth/account/mixins.py
new/django_allauth-65.15.1/allauth/account/mixins.py
--- old/django_allauth-65.15.0/allauth/account/mixins.py 2026-03-05
20:17:28.000000000 +0100
+++ new/django_allauth-65.15.1/allauth/account/mixins.py 2026-04-01
22:43:05.000000000 +0200
@@ -54,10 +54,19 @@
return response
def get_authenticated_redirect_url(self):
- redirect_field_name = self.redirect_field_name
+ redirect_field_name = getattr(self, "redirect_field_name",
REDIRECT_FIELD_NAME)
+ url = None
+ if hasattr(self, "get_success_url"):
+ try:
+ url = self.get_success_url()
+ except ImproperlyConfigured:
+ # If a view does not provide a `success_url`, Django raises a
+ # "No URL to redirect to. Provide a success_url." exception.
+ # That is no issue in our case.
+ pass
return get_login_redirect_url(
self.request,
- url=self.get_success_url(),
+ url=url,
redirect_field_name=redirect_field_name,
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_allauth-65.15.0/allauth/account/views.py
new/django_allauth-65.15.1/allauth/account/views.py
--- old/django_allauth-65.15.0/allauth/account/views.py 2026-03-09
14:25:50.000000000 +0100
+++ new/django_allauth-65.15.1/allauth/account/views.py 2026-04-01
23:49:40.000000000 +0200
@@ -2,12 +2,11 @@
from django.contrib import messages
from django.contrib.auth.decorators import login_required
-from django.contrib.sites.shortcuts import get_current_site
from django.core.exceptions import PermissionDenied
from django.core.validators import validate_email
from django.forms import Form, ValidationError
from django.http import Http404, HttpResponse, HttpResponseBase,
HttpResponseRedirect
-from django.urls import NoReverseMatch, reverse, reverse_lazy
+from django.urls import reverse, reverse_lazy
from django.utils.decorators import method_decorator
from django.utils.functional import cached_property
from django.views.decorators.cache import never_cache
@@ -41,6 +40,7 @@
from allauth.account.internal.flows.email_verification import (
send_verification_email_to_address,
)
+from allauth.account.internal.templatekit import get_entrance_context_data
from allauth.account.mixins import (
AjaxCapableProcessFormViewMixin,
CloseableSignupMixin,
@@ -112,37 +112,8 @@
return e.response
def get_context_data(self, **kwargs) -> dict:
- passkey_login_enabled = False
- if allauth_app_settings.MFA_ENABLED:
- from allauth.mfa import app_settings as mfa_settings
-
- passkey_login_enabled = mfa_settings.PASSKEY_LOGIN_ENABLED
ret = super().get_context_data(**kwargs)
- signup_url = None
- if not allauth_app_settings.SOCIALACCOUNT_ONLY:
- try:
- signup_url =
self.passthrough_next_url(reverse("account_signup"))
- except NoReverseMatch:
- # There may project specific tweaks other than
- # SOCIALACCOUNT_ONLY ...
- pass
- site = get_current_site(self.request)
-
- ret.update(
- {
- "signup_url": signup_url,
- "site": site,
- "SOCIALACCOUNT_ENABLED":
allauth_app_settings.SOCIALACCOUNT_ENABLED,
- "SOCIALACCOUNT_ONLY": allauth_app_settings.SOCIALACCOUNT_ONLY,
- "LOGIN_BY_CODE_ENABLED": app_settings.LOGIN_BY_CODE_ENABLED,
- "PASSKEY_LOGIN_ENABLED": passkey_login_enabled,
- }
- )
- if app_settings.LOGIN_BY_CODE_ENABLED:
- request_login_code_url = self.passthrough_next_url(
- reverse("account_request_login_code")
- )
- ret["request_login_code_url"] = request_login_code_url
+ ret.update(get_entrance_context_data(self.request))
return ret
@@ -186,11 +157,7 @@
def get_context_data(self, **kwargs) -> dict:
ret = super().get_context_data(**kwargs)
- passkey_signup_enabled = False
- if allauth_app_settings.MFA_ENABLED:
- from allauth.mfa import app_settings as mfa_settings
-
- passkey_signup_enabled = mfa_settings.PASSKEY_SIGNUP_ENABLED
+ ret.update(get_entrance_context_data(self.request))
form = ret["form"]
email = self.request.session.get("account_verified_email")
if email:
@@ -199,25 +166,6 @@
email_keys.append("email2")
for email_key in email_keys:
form.fields[email_key].initial = email
- login_url = self.passthrough_next_url(reverse("account_login"))
- signup_url = self.passthrough_next_url(reverse("account_signup"))
- signup_by_passkey_url = None
- if passkey_signup_enabled:
- signup_by_passkey_url = self.passthrough_next_url(
- reverse("account_signup_by_passkey")
- )
- site = get_current_site(self.request)
- ret.update(
- {
- "login_url": login_url,
- "signup_url": signup_url,
- "signup_by_passkey_url": signup_by_passkey_url,
- "site": site,
- "SOCIALACCOUNT_ENABLED":
allauth_app_settings.SOCIALACCOUNT_ENABLED,
- "SOCIALACCOUNT_ONLY": allauth_app_settings.SOCIALACCOUNT_ONLY,
- "PASSKEY_SIGNUP_ENABLED": passkey_signup_enabled,
- }
- )
return ret
def get_initial(self) -> dict:
@@ -325,10 +273,9 @@
def get_context_data(self, **kwargs) -> dict:
ctx = super().get_context_data(**kwargs)
- site = get_current_site(self.request)
+ ctx.update(get_entrance_context_data(self.request))
ctx.update(
{
- "site": site,
"confirmation": self.object,
"can_confirm": self.object
and self.object.email_address.can_set_verified(),
@@ -604,11 +551,10 @@
def get_context_data(self, **kwargs) -> dict:
ret = super().get_context_data(**kwargs)
- login_url = self.passthrough_next_url(reverse("account_login"))
+ ret.update(get_entrance_context_data(self.request))
# NOTE: For backwards compatibility
ret["password_reset_form"] = ret.get("form")
# (end NOTE)
- ret.update({"login_url": login_url})
return ret
@@ -619,6 +565,11 @@
class PasswordResetDoneView(TemplateView):
template_name =
f"account/password_reset_done.{app_settings.TEMPLATE_EXTENSION}"
+ def get_context_data(self, **kwargs) -> dict:
+ ret = super().get_context_data(**kwargs)
+ ret.update(get_entrance_context_data(self.request))
+ return ret
+
password_reset_done = PasswordResetDoneView.as_view()
@@ -687,6 +638,7 @@
def get_context_data(self, **kwargs) -> dict:
ret = super().get_context_data(**kwargs)
+ ret.update(get_entrance_context_data(self.request))
ret["action_url"] = reverse(
"account_reset_password_from_key",
kwargs={
@@ -721,6 +673,11 @@
f"account/password_reset_from_key_done.{app_settings.TEMPLATE_EXTENSION}"
)
+ def get_context_data(self, **kwargs) -> dict:
+ ret = super().get_context_data(**kwargs)
+ ret.update(get_entrance_context_data(self.request))
+ return ret
+
password_reset_from_key_done = PasswordResetFromKeyDoneView.as_view()
@@ -756,6 +713,7 @@
def get_context_data(self, **kwargs) -> dict:
ret = super().get_context_data(**kwargs)
+ ret.update(get_entrance_context_data(self.request))
ret["action_url"] = reverse("account_complete_password_reset")
return ret
@@ -806,6 +764,7 @@
def get_context_data(self, **kwargs):
ret = super().get_context_data(**kwargs)
+ ret.update(get_entrance_context_data(self.request))
ret["email"] = self._process.state["email"]
ret["verify_form"] = ret["form"]
return ret
@@ -864,6 +823,11 @@
class AccountInactiveView(TemplateView):
template_name =
f"account/account_inactive.{app_settings.TEMPLATE_EXTENSION}"
+ def get_context_data(self, **kwargs) -> dict:
+ ret = super().get_context_data(**kwargs)
+ ret.update(get_entrance_context_data(self.request))
+ return ret
+
account_inactive = AccountInactiveView.as_view()
@@ -872,6 +836,11 @@
class EmailVerificationSentView(TemplateView):
template_name =
f"account/verification_sent.{app_settings.TEMPLATE_EXTENSION}"
+ def get_context_data(self, **kwargs) -> dict:
+ ret = super().get_context_data(**kwargs)
+ ret.update(get_entrance_context_data(self.request))
+ return ret
+
class ConfirmEmailVerificationCodeView(NextRedirectMixin, FormView):
template_name = (
@@ -942,6 +911,7 @@
def get_context_data(self, **kwargs):
ret = super().get_context_data(**kwargs)
+ ret.update(get_entrance_context_data(self.request))
ret["can_change"] = self._process.can_change
ret["can_resend"] = self._process.can_resend
ret["email"] = self._process.state["email"]
@@ -1130,8 +1100,7 @@
def get_context_data(self, **kwargs) -> dict:
ret = super().get_context_data(**kwargs)
- site = get_current_site(self.request)
- ret.update({"site": site})
+ ret.update(get_entrance_context_data(self.request))
return ret
@@ -1234,13 +1203,12 @@
def get_context_data(self, **kwargs) -> dict:
ret = super().get_context_data(**kwargs)
- site = get_current_site(self.request)
+ ret.update(get_entrance_context_data(self.request))
email = self._process.state.get("email")
phone = self._process.state.get("phone")
ret.update(
{
"can_resend": self._process.can_resend,
- "site": site,
"email": email,
"phone": phone,
"verify_form": ret["form"],
@@ -1344,9 +1312,9 @@
def get_context_data(self, **kwargs):
ret = super().get_context_data(**kwargs)
+ ret.update(get_entrance_context_data(self.request))
ret["can_change"] = self.process.can_change
ret["can_resend"] = self.process.can_resend
- site = get_current_site(self.request)
if self._action == "change":
ret["change_form"] = ret["form"]
ret["verify_form"] = self._get_verify_form_class()()
@@ -1355,7 +1323,6 @@
ret["verify_form"] = ret["form"]
ret.update(
{
- "site": site,
"phone": self.process.phone,
"action": self._action,
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_allauth-65.15.0/allauth/mfa/base/views.py
new/django_allauth-65.15.1/allauth/mfa/base/views.py
--- old/django_allauth-65.15.0/allauth/mfa/base/views.py 2026-03-05
20:28:53.000000000 +0100
+++ new/django_allauth-65.15.1/allauth/mfa/base/views.py 2026-04-01
23:51:16.000000000 +0200
@@ -9,6 +9,7 @@
from allauth.account import app_settings as account_settings
from allauth.account.internal.decorators import login_stage_required
+from allauth.account.internal.templatekit import get_entrance_context_data
from allauth.account.views import BaseReauthenticateView
from allauth.mfa import app_settings
from allauth.mfa.base.forms import AuthenticateForm, ReauthenticateForm
@@ -93,6 +94,7 @@
def get_context_data(self, **kwargs) -> dict:
ret = super().get_context_data()
+ ret.update(get_entrance_context_data(self.request))
ret.update(
{
"form": self.auth_form,
@@ -174,6 +176,7 @@
def get_context_data(self, **kwargs) -> dict:
ret = super().get_context_data(**kwargs)
+ ret.update(get_entrance_context_data(self.request))
now = timezone.now()
ret["trust_from"] = now
ret["trust_until"] = now + app_settings.TRUST_COOKIE_AGE
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_allauth-65.15.0/allauth/mfa/webauthn/views.py
new/django_allauth-65.15.1/allauth/mfa/webauthn/views.py
--- old/django_allauth-65.15.0/allauth/mfa/webauthn/views.py 2026-03-06
12:28:53.000000000 +0100
+++ new/django_allauth-65.15.1/allauth/mfa/webauthn/views.py 2026-04-01
23:54:16.000000000 +0200
@@ -10,6 +10,7 @@
from allauth.account.adapter import get_adapter as get_account_adapter
from allauth.account.decorators import reauthentication_required
from allauth.account.internal.decorators import login_stage_required
+from allauth.account.internal.templatekit import get_entrance_context_data
from allauth.account.mixins import NextRedirectMixin,
RedirectAuthenticatedUserMixin
from allauth.account.models import Login
from allauth.account.views import BaseReauthenticateView
@@ -131,6 +132,11 @@
login = Login(user=authenticator.user, redirect_url=redirect_url)
return flows.perform_passwordless_login(self.request, authenticator,
login)
+ def get_context_data(self, **kwargs) -> dict:
+ ret = super().get_context_data(**kwargs)
+ ret.update(get_entrance_context_data(self.request))
+ return ret
+
login_webauthn = LoginWebAuthnView.as_view()
@@ -206,6 +212,7 @@
def get_context_data(self, **kwargs) -> dict:
ret = super().get_context_data()
+ ret.update(get_entrance_context_data(self.request))
stage = self._login_stage
creation_options = auth.begin_registration(stage.login.user, True)
ret["js_data"] = {"creation_options": creation_options}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django_allauth-65.15.0/allauth/socialaccount/adapter.py
new/django_allauth-65.15.1/allauth/socialaccount/adapter.py
--- old/django_allauth-65.15.0/allauth/socialaccount/adapter.py 2026-03-06
09:11:23.000000000 +0100
+++ new/django_allauth-65.15.1/allauth/socialaccount/adapter.py 2026-04-01
22:00:45.000000000 +0200
@@ -342,10 +342,10 @@
def can_authenticate_by_email(self, login, email):
"""
- Returns ``True`` iff authentication by email is active for this
login/email.
+ Returns ``True`` if authentication by email is active for this
login/email.
This can be configured with a ``"email_authentication"`` key in the
provider
- app settings, or a ``"VERIFIED_EMAIL"`` in the global provider settings
+ app settings, or a ``"EMAIL_AUTHENTICATION"`` in the global provider
settings
(``SOCIALACCOUNT_PROVIDERS``).
"""
ret = None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django_allauth-65.15.0/allauth/socialaccount/providers/oauth/client.py
new/django_allauth-65.15.1/allauth/socialaccount/providers/oauth/client.py
--- old/django_allauth-65.15.0/allauth/socialaccount/providers/oauth/client.py
2026-03-05 18:36:47.000000000 +0100
+++ new/django_allauth-65.15.1/allauth/socialaccount/providers/oauth/client.py
2026-03-13 10:38:19.000000000 +0100
@@ -208,7 +208,11 @@
)
with get_adapter().get_requests_session() as sess:
response = sess.request(
- url, method=method.lower(), auth=oauth, headers=headers,
params=params
+ method=method.lower(),
+ url=url,
+ auth=oauth,
+ headers=headers,
+ params=params,
)
if response.status_code != HTTPStatus.OK:
raise OAuthError(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django_allauth-65.15.0/allauth/socialaccount/views.py
new/django_allauth-65.15.1/allauth/socialaccount/views.py
--- old/django_allauth-65.15.0/allauth/socialaccount/views.py 2026-03-05
20:19:14.000000000 +0100
+++ new/django_allauth-65.15.1/allauth/socialaccount/views.py 2026-04-01
23:56:16.000000000 +0200
@@ -1,7 +1,6 @@
from http import HTTPStatus
from django.contrib.auth.decorators import login_required
-from django.contrib.sites.shortcuts import get_current_site
from django.http import HttpResponse, HttpResponseRedirect
from django.urls import reverse, reverse_lazy
from django.utils.decorators import method_decorator
@@ -9,6 +8,7 @@
from django.views.generic.edit import FormView
from allauth.account.internal.decorators import login_not_required
+from allauth.account.internal.templatekit import get_entrance_context_data
from allauth.socialaccount.forms import DisconnectForm, SignupForm
from allauth.socialaccount.internal import flows
from allauth.socialaccount.models import SocialAccount
@@ -58,9 +58,9 @@
def get_context_data(self, **kwargs):
ret = super().get_context_data(**kwargs)
+ ret.update(get_entrance_context_data(self.request))
ret.update(
dict(
- site=get_current_site(self.request),
account=self.sociallogin.account,
)
)
@@ -79,6 +79,11 @@
f"socialaccount/login_cancelled.{account_settings.TEMPLATE_EXTENSION}"
)
+ def get_context_data(self, **kwargs) -> dict:
+ ret = super().get_context_data(**kwargs)
+ ret.update(get_entrance_context_data(self.request))
+ return ret
+
login_cancelled = LoginCancelledView.as_view()
@@ -94,6 +99,11 @@
status=HTTPStatus.UNAUTHORIZED,
)
+ def get_context_data(self, **kwargs) -> dict:
+ ret = super().get_context_data(**kwargs)
+ ret.update(get_entrance_context_data(self.request))
+ return ret
+
login_error = LoginErrorView.as_view()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django_allauth-65.15.0/allauth/templates/account/request_login_code.html
new/django_allauth-65.15.1/allauth/templates/account/request_login_code.html
---
old/django_allauth-65.15.0/allauth/templates/account/request_login_code.html
2025-11-18 23:00:57.000000000 +0100
+++
new/django_allauth-65.15.1/allauth/templates/account/request_login_code.html
2026-04-02 10:26:25.000000000 +0200
@@ -11,8 +11,7 @@
{% element p %}
{% blocktranslate %}You will receive a special code for a
password-free sign-in.{% endblocktranslate %}
{% endelement %}
- {% url 'account_request_login_code' as login_url %}
- {% element form form=form method="post" action=login_url
tags="entrance,login" %}
+ {% element form form=form method="post" action=request_login_code_url
tags="entrance,login" %}
{% slot body %}
{% csrf_token %}
{% element fields form=form unlabeled=True %}
@@ -25,7 +24,6 @@
{% endelement %}
{% endslot %}
{% endelement %}
- {% url 'account_login' as login_url %}
{% element button href=login_url tags="link" %}
{% translate "Other sign-in options" %}
{% endelement %}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django_allauth-65.15.0/django_allauth.egg-info/PKG-INFO
new/django_allauth-65.15.1/django_allauth.egg-info/PKG-INFO
--- old/django_allauth-65.15.0/django_allauth.egg-info/PKG-INFO 2026-03-09
14:43:54.000000000 +0100
+++ new/django_allauth-65.15.1/django_allauth.egg-info/PKG-INFO 2026-04-02
11:16:31.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: django-allauth
-Version: 65.15.0
+Version: 65.15.1
Summary: Integrated set of Django applications addressing authentication,
registration, account management as well as 3rd party (social) account
authentication.
Author-email: Raymond Penners <[email protected]>
License: MIT
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django_allauth-65.15.0/django_allauth.egg-info/SOURCES.txt
new/django_allauth-65.15.1/django_allauth.egg-info/SOURCES.txt
--- old/django_allauth-65.15.0/django_allauth.egg-info/SOURCES.txt
2026-03-09 14:43:54.000000000 +0100
+++ new/django_allauth-65.15.1/django_allauth.egg-info/SOURCES.txt
2026-04-02 11:16:32.000000000 +0200
@@ -66,6 +66,7 @@
allauth/account/internal/decorators.py
allauth/account/internal/emailkit.py
allauth/account/internal/stagekit.py
+allauth/account/internal/templatekit.py
allauth/account/internal/userkit.py
allauth/account/internal/flows/__init__.py
allauth/account/internal/flows/code_verification.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_allauth-65.15.0/docs/conf.py
new/django_allauth-65.15.1/docs/conf.py
--- old/django_allauth-65.15.0/docs/conf.py 2026-03-05 15:40:49.000000000
+0100
+++ new/django_allauth-65.15.1/docs/conf.py 2026-03-13 10:37:11.000000000
+0100
@@ -53,9 +53,9 @@
# built documents.
#
# The short X.Y version.
-version = "65.15.0"
+version = "65.15.1"
# The full version, including alpha/beta/rc tags.
-release = "65.15.0"
+release = "65.15.1"
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django_allauth-65.15.0/examples/react-spa/backend/requirements.txt
new/django_allauth-65.15.1/examples/react-spa/backend/requirements.txt
--- old/django_allauth-65.15.0/examples/react-spa/backend/requirements.txt
2026-03-09 14:29:57.000000000 +0100
+++ new/django_allauth-65.15.1/examples/react-spa/backend/requirements.txt
2026-04-02 11:13:16.000000000 +0200
@@ -1,4 +1,4 @@
-django-allauth[mfa,socialaccount]>=65.15.0
+django-allauth[mfa,socialaccount]>=65.15.1
qrcode >= 7.0.0
drf-spectacular == 0.28.0
djangorestframework >= 3.15.2,<4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django_allauth-65.15.0/examples/regular-django/requirements.txt
new/django_allauth-65.15.1/examples/regular-django/requirements.txt
--- old/django_allauth-65.15.0/examples/regular-django/requirements.txt
2026-03-09 14:29:57.000000000 +0100
+++ new/django_allauth-65.15.1/examples/regular-django/requirements.txt
2026-04-02 11:13:16.000000000 +0200
@@ -1 +1 @@
-django-allauth[mfa,saml,socialaccount,steam]>=65.15.0
+django-allauth[mfa,saml,socialaccount,steam]>=65.15.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django_allauth-65.15.0/tests/apps/mfa/webauthn/test_views.py
new/django_allauth-65.15.1/tests/apps/mfa/webauthn/test_views.py
--- old/django_allauth-65.15.0/tests/apps/mfa/webauthn/test_views.py
2026-01-17 13:07:19.000000000 +0100
+++ new/django_allauth-65.15.1/tests/apps/mfa/webauthn/test_views.py
2026-04-01 22:44:05.000000000 +0200
@@ -193,6 +193,14 @@
assert resp["location"] == settings.LOGIN_REDIRECT_URL
+def test_login_webauthn_when_already_authenticated(auth_client, passkey):
+ """Visiting the WebAuthn login page as a logged-in user should redirect,
+ not crash."""
+ resp = auth_client.get(reverse("mfa_login_webauthn"))
+ assert resp.status_code == HTTPStatus.FOUND
+ assert resp["location"] == settings.LOGIN_REDIRECT_URL
+
+
def test_webauthn_login(
client, user_with_passkey, passkey, user_password,
webauthn_authentication_bypass
):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django_allauth-65.15.0/tests/apps/socialaccount/test_login.py
new/django_allauth-65.15.1/tests/apps/socialaccount/test_login.py
--- old/django_allauth-65.15.0/tests/apps/socialaccount/test_login.py
2026-01-17 13:07:19.000000000 +0100
+++ new/django_allauth-65.15.1/tests/apps/socialaccount/test_login.py
2026-04-01 23:58:25.000000000 +0200
@@ -97,7 +97,7 @@
assert not updated_signal.called
-def test_login_cancelled(client):
+def test_login_cancelled(client, db):
resp = client.get(reverse("socialaccount_login_cancelled"))
assert resp.status_code == HTTPStatus.OK
assertTemplateUsed(resp, "socialaccount/login_cancelled.html")