summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorHisham Mahmood <hishammahmood41@gmail.com>2024-05-05 11:21:28 +0500
committerSarah Boyce <42296566+sarahboyce@users.noreply.github.com>2024-05-22 08:51:17 +0200
commitc7fc9f20b49b5889a9a8f47de45165ac443c1a21 (patch)
tree113e55d5b047f479375638c1f17d9c127aedf618 /docs
parent7857507c7fc43350701700d4215a37baea7655f0 (diff)
Fixed #31405 -- Added LoginRequiredMiddleware.
Co-authored-by: Adam Johnson <me@adamj.eu> Co-authored-by: Mehmet İnce <mehmet@mehmetince.net> Co-authored-by: Sarah Boyce <42296566+sarahboyce@users.noreply.github.com>
Diffstat (limited to 'docs')
-rw-r--r--docs/ref/checks.txt4
-rw-r--r--docs/ref/middleware.txt58
-rw-r--r--docs/ref/settings.txt5
-rw-r--r--docs/releases/5.1.txt14
-rw-r--r--docs/topics/auth/default.txt17
5 files changed, 96 insertions, 2 deletions
diff --git a/docs/ref/checks.txt b/docs/ref/checks.txt
index efc8cf666a..d78a6f76b2 100644
--- a/docs/ref/checks.txt
+++ b/docs/ref/checks.txt
@@ -868,6 +868,10 @@ The following checks are performed on the default
for its builtin permission names to be at most 100 characters.
* **auth.E012**: The permission codenamed ``<codename>`` of model ``<model>``
is longer than 100 characters.
+* **auth.E013**: In order to use
+ :class:`django.contrib.auth.middleware.LoginRequiredMiddleware`,
+ :class:`django.contrib.auth.middleware.AuthenticationMiddleware` must be
+ defined before it in MIDDLEWARE.
``contenttypes``
----------------
diff --git a/docs/ref/middleware.txt b/docs/ref/middleware.txt
index 63b38da0a0..ba9bef7e6f 100644
--- a/docs/ref/middleware.txt
+++ b/docs/ref/middleware.txt
@@ -495,6 +495,58 @@ Adds the ``user`` attribute, representing the currently-logged-in user, to
every incoming ``HttpRequest`` object. See :ref:`Authentication in web requests
<auth-web-requests>`.
+.. class:: LoginRequiredMiddleware
+
+.. versionadded:: 5.1
+
+Redirects all unauthenticated requests to a login page. For admin views, this
+redirects to the admin login. For all other views, this will redirect to
+:setting:`settings.LOGIN_URL <LOGIN_URL>`. This can be customized by using the
+:func:`~.django.contrib.auth.decorators.login_required` decorator and setting
+``login_url`` or ``redirect_field_name`` for the view. For example::
+
+ @method_decorator(
+ login_required(login_url="/login/", redirect_field_name="redirect_to"),
+ name="dispatch",
+ )
+ class MyView(View):
+ pass
+
+
+ @login_required(login_url="/login/", redirect_field_name="redirect_to")
+ def my_view(request): ...
+
+Views using the :func:`~django.contrib.auth.decorators.login_not_required`
+decorator are exempt from this requirement.
+
+.. admonition:: Ensure that your login view does not require a login.
+
+ To prevent infinite redirects, ensure you have
+ :ref:`enabled unauthenticated requests
+ <disable-login-required-middleware-for-views>` to your login view.
+
+**Methods and Attributes**
+
+.. attribute:: redirect_field_name
+
+ Defaults to ``"next"``.
+
+.. method:: get_login_url()
+
+ Returns the URL that unauthenticated requests will be redirected to. If
+ defined, this returns the ``login_url`` set on the
+ :func:`~.django.contrib.auth.decorators.login_required` decorator. Defaults
+ to :setting:`settings.LOGIN_URL <LOGIN_URL>`.
+
+.. method:: get_redirect_field_name()
+
+ Returns the name of the query parameter that contains the URL the user
+ should be redirected to after a successful login. If defined, this returns
+ the ``redirect_field_name`` set on the
+ :func:`~.django.contrib.auth.decorators.login_required` decorator. Defaults
+ to :attr:`redirect_field_name`. If ``None`` is returned, a query parameter
+ won't be added.
+
.. class:: RemoteUserMiddleware
Middleware for utilizing web server provided authentication. See
@@ -597,6 +649,12 @@ Here are some hints about the ordering of various Django middleware classes:
After ``SessionMiddleware``: uses session storage.
+#. :class:`~django.contrib.auth.middleware.LoginRequiredMiddleware`
+
+ .. versionadded:: 5.1
+
+ After ``AuthenticationMiddleware``: uses user object.
+
#. :class:`~django.contrib.messages.middleware.MessageMiddleware`
After ``SessionMiddleware``: can use session-based storage.
diff --git a/docs/ref/settings.txt b/docs/ref/settings.txt
index fdd44a887d..ee25eab0dd 100644
--- a/docs/ref/settings.txt
+++ b/docs/ref/settings.txt
@@ -3060,8 +3060,9 @@ Default: ``'/accounts/login/'``
The URL or :ref:`named URL pattern <naming-url-patterns>` where requests are
redirected for login when using the
:func:`~django.contrib.auth.decorators.login_required` decorator,
-:class:`~django.contrib.auth.mixins.LoginRequiredMixin`, or
-:class:`~django.contrib.auth.mixins.AccessMixin`.
+:class:`~django.contrib.auth.mixins.LoginRequiredMixin`,
+:class:`~django.contrib.auth.mixins.AccessMixin`, or when
+:class:`~django.contrib.auth.middleware.LoginRequiredMiddleware` is installed.
.. setting:: LOGOUT_REDIRECT_URL
diff --git a/docs/releases/5.1.txt b/docs/releases/5.1.txt
index faaa5c9833..f2b7663576 100644
--- a/docs/releases/5.1.txt
+++ b/docs/releases/5.1.txt
@@ -26,6 +26,20 @@ only officially support the latest release of each series.
What's new in Django 5.1
========================
+Middleware to require authentication by default
+-----------------------------------------------
+
+The new :class:`~django.contrib.auth.middleware.LoginRequiredMiddleware`
+redirects all unauthenticated requests to a login page. Views can allow
+unauthenticated requests by using the new
+:func:`~django.contrib.auth.decorators.login_not_required` decorator.
+
+The :class:`~django.contrib.auth.middleware.LoginRequiredMiddleware` respects
+the ``login_url`` and ``redirect_field_name`` values set via the
+:func:`~.django.contrib.auth.decorators.login_required` decorator, but does not
+support setting ``login_url`` or ``redirect_field_name`` via the
+:class:`~django.contrib.auth.mixins.LoginRequiredMixin`.
+
Minor features
--------------
diff --git a/docs/topics/auth/default.txt b/docs/topics/auth/default.txt
index 795a1bdacc..1d2ea8132d 100644
--- a/docs/topics/auth/default.txt
+++ b/docs/topics/auth/default.txt
@@ -656,8 +656,25 @@ inheritance list.
``is_active`` flag on a user, but the default
:setting:`AUTHENTICATION_BACKENDS` reject inactive users.
+.. _disable-login-required-middleware-for-views:
+
.. currentmodule:: django.contrib.auth.decorators
+The ``login_not_required`` decorator
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. versionadded:: 5.1
+
+When :class:`~django.contrib.auth.middleware.LoginRequiredMiddleware` is
+installed, all views require authentication by default. Some views, such as the
+login view, may need to disable this behavior.
+
+.. function:: login_not_required()
+
+ Allows unauthenticated requests without redirecting to the login page when
+ :class:`~django.contrib.auth.middleware.LoginRequiredMiddleware` is
+ installed.
+
Limiting access to logged-in users that pass a test
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~