Skip to content

Commit 1958144

Browse files
committed
reworked django logout since LogoutView changed between <= 4.0 and >= 4.1
https://docs.djangoproject.com/en/dev/releases/4.1/#log-out-via-get
1 parent d5cab8e commit 1958144

File tree

1 file changed

+23
-7
lines changed

1 file changed

+23
-7
lines changed

djangosaml2/views.py

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,18 @@
2626
HttpResponseRedirect,
2727
HttpResponseServerError,
2828
)
29-
from django.shortcuts import render
29+
from django.shortcuts import render, resolve_url
3030
from django.template import TemplateDoesNotExist
3131
from django.urls import reverse
3232
from django.utils.decorators import method_decorator
3333
from django.utils.module_loading import import_string
34+
from django.utils.translation import gettext_lazy as _
3435
from django.views.decorators.csrf import csrf_exempt
3536
from django.views.generic import View
3637

3738
from django.contrib import auth
3839
from django.contrib.auth.mixins import LoginRequiredMixin
39-
from django.contrib.auth.views import LogoutView as AuthLogoutView
40+
from django.contrib.sites.shortcuts import get_current_site
4041

4142
import saml2
4243
from saml2.client_base import LogoutError
@@ -787,14 +788,29 @@ def do_logout_service(self, request, data, binding):
787788
return HttpResponseBadRequest("No SAMLResponse or SAMLRequest parameter found")
788789

789790

790-
def finish_logout(request, response, next_page=None):
791+
def finish_logout(request, response):
791792
if getattr(settings, "SAML_IGNORE_LOGOUT_ERRORS", False) or (
792793
response and response.status_ok()
793794
):
794-
if not next_page:
795-
next_page = getattr(settings, "LOGOUT_REDIRECT_URL", "/")
796-
logger.debug("Performing django logout with a next_page of %s", next_page)
797-
return AuthLogoutView.as_view()(request, next_page=next_page)
795+
logger.debug("Performing django logout.")
796+
797+
auth.logout(request)
798+
799+
if settings.LOGOUT_REDIRECT_URL is not None:
800+
return HttpResponseRedirect(resolve_url(settings.LOGOUT_REDIRECT_URL))
801+
else:
802+
current_site = get_current_site(request)
803+
return render(
804+
request,
805+
"registration/logged_out.html",
806+
{
807+
"site": current_site,
808+
"site_name": current_site.name,
809+
"title": _("Logged out"),
810+
"subtitle": None,
811+
},
812+
)
813+
798814
logger.error("Unknown error during the logout")
799815
return render(request, "djangosaml2/logout_error.html", {})
800816

0 commit comments

Comments
 (0)