mirror of
https://github.com/django/django.git
synced 2025-05-29 10:16:30 +00:00
Fixed #12405 -- Added LOGOUT_REDIRECT_URL setting.
After a user logs out via auth.views.logout(), they're redirected to LOGOUT_REDIRECT_URL if no `next_page` argument is provided.
This commit is contained in:
parent
ad216381fc
commit
dcee1dfc79
@ -489,6 +489,8 @@ LOGIN_URL = '/accounts/login/'
|
|||||||
|
|
||||||
LOGIN_REDIRECT_URL = '/accounts/profile/'
|
LOGIN_REDIRECT_URL = '/accounts/profile/'
|
||||||
|
|
||||||
|
LOGOUT_REDIRECT_URL = None
|
||||||
|
|
||||||
# The number of days a password reset link is valid for
|
# The number of days a password reset link is valid for
|
||||||
PASSWORD_RESET_TIMEOUT_DAYS = 3
|
PASSWORD_RESET_TIMEOUT_DAYS = 3
|
||||||
|
|
||||||
|
@ -104,6 +104,8 @@ def logout(request, next_page=None,
|
|||||||
|
|
||||||
if next_page is not None:
|
if next_page is not None:
|
||||||
next_page = resolve_url(next_page)
|
next_page = resolve_url(next_page)
|
||||||
|
elif settings.LOGOUT_REDIRECT_URL:
|
||||||
|
next_page = resolve_url(settings.LOGOUT_REDIRECT_URL)
|
||||||
|
|
||||||
if (redirect_field_name in request.POST or
|
if (redirect_field_name in request.POST or
|
||||||
redirect_field_name in request.GET):
|
redirect_field_name in request.GET):
|
||||||
|
@ -2642,6 +2642,26 @@ This setting also accepts view function names and :ref:`named URL patterns
|
|||||||
<naming-url-patterns>` which can be used to reduce configuration duplication
|
<naming-url-patterns>` which can be used to reduce configuration duplication
|
||||||
since you don't have to define the URL in two places (``settings`` and URLconf).
|
since you don't have to define the URL in two places (``settings`` and URLconf).
|
||||||
|
|
||||||
|
.. setting:: LOGOUT_REDIRECT_URL
|
||||||
|
|
||||||
|
``LOGOUT_REDIRECT_URL``
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
.. versionadded:: 1.10
|
||||||
|
|
||||||
|
Default: ``None``
|
||||||
|
|
||||||
|
The URL where requests are redirected after a user logs out using the
|
||||||
|
:func:`~django.contrib.auth.views.logout` view (if the view doesn't get a
|
||||||
|
``next_page`` argument).
|
||||||
|
|
||||||
|
If ``None``, no redirect will be performed and the logout view will be
|
||||||
|
rendered.
|
||||||
|
|
||||||
|
This setting also accepts view function names and :ref:`named URL patterns
|
||||||
|
<naming-url-patterns>` which can be used to reduce configuration duplication
|
||||||
|
since you don't have to define the URL in two places (``settings`` and URLconf).
|
||||||
|
|
||||||
.. setting:: PASSWORD_RESET_TIMEOUT_DAYS
|
.. setting:: PASSWORD_RESET_TIMEOUT_DAYS
|
||||||
|
|
||||||
``PASSWORD_RESET_TIMEOUT_DAYS``
|
``PASSWORD_RESET_TIMEOUT_DAYS``
|
||||||
|
@ -82,6 +82,10 @@ Minor features
|
|||||||
* Added the optional ``backend`` argument to :func:`~django.contrib.auth.login`
|
* Added the optional ``backend`` argument to :func:`~django.contrib.auth.login`
|
||||||
to allow using it without credentials.
|
to allow using it without credentials.
|
||||||
|
|
||||||
|
* The new :setting:`LOGOUT_REDIRECT_URL` setting controls the redirect of the
|
||||||
|
:func:`~django.contrib.auth.views.logout` view, if the view doesn't get a
|
||||||
|
``next_page`` argument.
|
||||||
|
|
||||||
:mod:`django.contrib.contenttypes`
|
:mod:`django.contrib.contenttypes`
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
@ -1105,7 +1105,9 @@ implementation details see :ref:`using-the-views`.
|
|||||||
|
|
||||||
**Optional arguments:**
|
**Optional arguments:**
|
||||||
|
|
||||||
* ``next_page``: The URL to redirect to after logout.
|
* ``next_page``: The URL to redirect to after logout. Defaults to
|
||||||
|
:setting:`settings.LOGOUT_REDIRECT_URL <LOGOUT_REDIRECT_URL>` if not
|
||||||
|
supplied.
|
||||||
|
|
||||||
* ``template_name``: The full name of a template to display after
|
* ``template_name``: The full name of a template to display after
|
||||||
logging the user out. Defaults to
|
logging the user out. Defaults to
|
||||||
|
@ -878,6 +878,18 @@ class LogoutTest(AuthViewsTestCase):
|
|||||||
self.client.get('/logout/')
|
self.client.get('/logout/')
|
||||||
self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], 'pl')
|
self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], 'pl')
|
||||||
|
|
||||||
|
@override_settings(LOGOUT_REDIRECT_URL='/custom/')
|
||||||
|
def test_logout_redirect_url_setting(self):
|
||||||
|
self.login()
|
||||||
|
response = self.client.get('/logout/')
|
||||||
|
self.assertRedirects(response, '/custom/', fetch_redirect_response=False)
|
||||||
|
|
||||||
|
@override_settings(LOGOUT_REDIRECT_URL='logout')
|
||||||
|
def test_logout_redirect_url_named_setting(self):
|
||||||
|
self.login()
|
||||||
|
response = self.client.get('/logout/')
|
||||||
|
self.assertRedirects(response, '/logout/', fetch_redirect_response=False)
|
||||||
|
|
||||||
|
|
||||||
# Redirect in test_user_change_password will fail if session auth hash
|
# Redirect in test_user_change_password will fail if session auth hash
|
||||||
# isn't updated after password change (#21649)
|
# isn't updated after password change (#21649)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user