Redirect after a CAS logout
This commit is contained in:
parent
6a75f78541
commit
8e95a01647
2 changed files with 15 additions and 4 deletions
|
@ -1,9 +1,11 @@
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
from urllib.parse import quote as urlquote
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.contrib.sessions.models import Session
|
from django.contrib.sessions.models import Session
|
||||||
from django.test import Client, TestCase
|
from django.test import Client, TestCase
|
||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
from authens.models import CASAccount
|
from authens.models import CASAccount
|
||||||
from authens.tests.cas_utils import FakeCASClient
|
from authens.tests.cas_utils import FakeCASClient
|
||||||
|
@ -44,7 +46,11 @@ class TestLogoutView(TestCase):
|
||||||
response = client.get("/authens/logout")
|
response = client.get("/authens/logout")
|
||||||
self.assertEqual(Session.objects.count(), 0) # User is logged out…
|
self.assertEqual(Session.objects.count(), 0) # User is logged out…
|
||||||
self.assertRedirects( # … and redirected to the CAS logout page.
|
self.assertRedirects( # … and redirected to the CAS logout page.
|
||||||
response, "https://cas.eleves.ens.fr/logout", fetch_redirect_response=False
|
response,
|
||||||
|
"https://cas.eleves.ens.fr/logout?service={}".format(
|
||||||
|
urlquote("http://testserver" + reverse("authens:login"))
|
||||||
|
),
|
||||||
|
fetch_redirect_response=False,
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_regular_logout_on_cas_account(self):
|
def test_regular_logout_on_cas_account(self):
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
from urllib.parse import urlunparse
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib import auth
|
from django.contrib import auth
|
||||||
from django.contrib.auth import views as auth_views
|
from django.contrib.auth import views as auth_views
|
||||||
|
@ -93,8 +95,11 @@ class LogoutView(auth_views.LogoutView):
|
||||||
self.cas_connected = False
|
self.cas_connected = False
|
||||||
|
|
||||||
def get_next_page(self):
|
def get_next_page(self):
|
||||||
|
next_page = super().get_next_page()
|
||||||
if self.cas_connected:
|
if self.cas_connected:
|
||||||
cas_client = get_cas_client(self.request)
|
cas_client = get_cas_client(self.request)
|
||||||
return cas_client.get_logout_url()
|
redirect_url = urlunparse(
|
||||||
else:
|
(self.request.scheme, self.request.get_host(), next_page, "", "", "")
|
||||||
return super().get_next_page()
|
)
|
||||||
|
next_page = cas_client.get_logout_url(redirect_url=redirect_url)
|
||||||
|
return next_page
|
||||||
|
|
Loading…
Reference in a new issue