Refs #33561 -- Made created=True required in signature of RemoteUserBackend.configure_user() subclasses.
Per deprecation timeline.
This commit is contained in:
parent
4d78d7338c
commit
ba082e0952
@ -1,10 +1,6 @@
|
|||||||
import warnings
|
|
||||||
|
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.contrib.auth.models import Permission
|
from django.contrib.auth.models import Permission
|
||||||
from django.db.models import Exists, OuterRef, Q
|
from django.db.models import Exists, OuterRef, Q
|
||||||
from django.utils.deprecation import RemovedInDjango50Warning
|
|
||||||
from django.utils.inspect import func_supports_parameter
|
|
||||||
|
|
||||||
UserModel = get_user_model()
|
UserModel = get_user_model()
|
||||||
|
|
||||||
@ -211,19 +207,7 @@ class RemoteUserBackend(ModelBackend):
|
|||||||
user = UserModel._default_manager.get_by_natural_key(username)
|
user = UserModel._default_manager.get_by_natural_key(username)
|
||||||
except UserModel.DoesNotExist:
|
except UserModel.DoesNotExist:
|
||||||
pass
|
pass
|
||||||
|
user = self.configure_user(request, user, created=created)
|
||||||
# RemovedInDjango50Warning: When the deprecation ends, replace with:
|
|
||||||
# user = self.configure_user(request, user, created=created)
|
|
||||||
if func_supports_parameter(self.configure_user, "created"):
|
|
||||||
user = self.configure_user(request, user, created=created)
|
|
||||||
else:
|
|
||||||
warnings.warn(
|
|
||||||
f"`created=True` must be added to the signature of "
|
|
||||||
f"{self.__class__.__qualname__}.configure_user().",
|
|
||||||
category=RemovedInDjango50Warning,
|
|
||||||
)
|
|
||||||
if created:
|
|
||||||
user = self.configure_user(request, user)
|
|
||||||
return user if self.user_can_authenticate(user) else None
|
return user if self.user_can_authenticate(user) else None
|
||||||
|
|
||||||
def clean_username(self, username):
|
def clean_username(self, username):
|
||||||
|
@ -324,3 +324,6 @@ to remove usage of these features.
|
|||||||
objects without providing the ``chunk_size`` argument is no longer allowed.
|
objects without providing the ``chunk_size`` argument is no longer allowed.
|
||||||
|
|
||||||
* Passing unsaved model instances to related filters is no longer allowed.
|
* Passing unsaved model instances to related filters is no longer allowed.
|
||||||
|
|
||||||
|
* ``created=True`` is required in the signature of
|
||||||
|
``RemoteUserBackend.configure_user()`` subclasses.
|
||||||
|
@ -6,14 +6,7 @@ from django.contrib.auth.backends import RemoteUserBackend
|
|||||||
from django.contrib.auth.middleware import RemoteUserMiddleware
|
from django.contrib.auth.middleware import RemoteUserMiddleware
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.middleware.csrf import _get_new_csrf_string, _mask_cipher_secret
|
from django.middleware.csrf import _get_new_csrf_string, _mask_cipher_secret
|
||||||
from django.test import (
|
from django.test import Client, TestCase, modify_settings, override_settings
|
||||||
Client,
|
|
||||||
TestCase,
|
|
||||||
ignore_warnings,
|
|
||||||
modify_settings,
|
|
||||||
override_settings,
|
|
||||||
)
|
|
||||||
from django.utils.deprecation import RemovedInDjango50Warning
|
|
||||||
|
|
||||||
|
|
||||||
@override_settings(ROOT_URLCONF="auth_tests.urls")
|
@override_settings(ROOT_URLCONF="auth_tests.urls")
|
||||||
@ -279,34 +272,6 @@ class RemoteUserCustomTest(RemoteUserTest):
|
|||||||
self.assertEqual(newuser.email, "user@example.com")
|
self.assertEqual(newuser.email, "user@example.com")
|
||||||
|
|
||||||
|
|
||||||
# RemovedInDjango50Warning.
|
|
||||||
class CustomRemoteUserNoCreatedArgumentBackend(CustomRemoteUserBackend):
|
|
||||||
def configure_user(self, request, user):
|
|
||||||
return super().configure_user(request, user)
|
|
||||||
|
|
||||||
|
|
||||||
@ignore_warnings(category=RemovedInDjango50Warning)
|
|
||||||
class RemoteUserCustomNoCreatedArgumentTest(RemoteUserTest):
|
|
||||||
backend = "auth_tests.test_remote_user.CustomRemoteUserNoCreatedArgumentBackend"
|
|
||||||
|
|
||||||
|
|
||||||
@override_settings(ROOT_URLCONF="auth_tests.urls")
|
|
||||||
@modify_settings(
|
|
||||||
AUTHENTICATION_BACKENDS={
|
|
||||||
"append": "auth_tests.test_remote_user.CustomRemoteUserNoCreatedArgumentBackend"
|
|
||||||
},
|
|
||||||
MIDDLEWARE={"append": "django.contrib.auth.middleware.RemoteUserMiddleware"},
|
|
||||||
)
|
|
||||||
class RemoteUserCustomNoCreatedArgumentDeprecationTest(TestCase):
|
|
||||||
def test_known_user_sync(self):
|
|
||||||
msg = (
|
|
||||||
"`created=True` must be added to the signature of "
|
|
||||||
"CustomRemoteUserNoCreatedArgumentBackend.configure_user()."
|
|
||||||
)
|
|
||||||
with self.assertWarnsMessage(RemovedInDjango50Warning, msg):
|
|
||||||
self.client.get("/remote_user/", **{RemoteUserTest.header: "newuser"})
|
|
||||||
|
|
||||||
|
|
||||||
class CustomHeaderMiddleware(RemoteUserMiddleware):
|
class CustomHeaderMiddleware(RemoteUserMiddleware):
|
||||||
"""
|
"""
|
||||||
Middleware that overrides custom HTTP auth user header.
|
Middleware that overrides custom HTTP auth user header.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user