mirror of
https://gitea.mueller.network/extern/django-helpdesk.git
synced 2024-12-25 16:18:51 +01:00
Add support for custom login handler
The custom login handler can be configured by setting the settings.LOGIN_URL variable. If LOGIN_URL is None or 'helpdesk:login', the app uses the default helpdesk login system. LOGIN_URL can be a view name or raw url.
This commit is contained in:
parent
b41f95fd7e
commit
0a43b9a160
37
helpdesk/tests/test_login.py
Normal file
37
helpdesk/tests/test_login.py
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
from django.test import TestCase, override_settings
|
||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
|
|
||||||
|
class TestLoginRedirect(TestCase):
|
||||||
|
|
||||||
|
@override_settings(LOGIN_URL='/custom/login/')
|
||||||
|
def test_custom_login_view_with_url(self):
|
||||||
|
"""Test login redirect when LOGIN_URL is set to custom url"""
|
||||||
|
response = self.client.get(reverse('helpdesk:login'))
|
||||||
|
# We expect that that helpdesk:home url is passed as next parameter in
|
||||||
|
# the redirect url, so that the custom login can redirect the browser
|
||||||
|
# back to helpdesk after the login.
|
||||||
|
home_url = reverse('helpdesk:home')
|
||||||
|
expected = '/custom/login/?next={}'.format(home_url)
|
||||||
|
self.assertRedirects(response, expected, fetch_redirect_response=False)
|
||||||
|
|
||||||
|
@override_settings(LOGIN_URL='/custom/login/')
|
||||||
|
def test_custom_login_next_param(self):
|
||||||
|
"""Test that the next url parameter is correctly relayed to custom login"""
|
||||||
|
next_param = "/redirect/back"
|
||||||
|
url = reverse('helpdesk:login') + "?next=" + next_param
|
||||||
|
response = self.client.get(url)
|
||||||
|
expected = '/custom/login/?next={}'.format(next_param)
|
||||||
|
self.assertRedirects(response, expected, fetch_redirect_response=False)
|
||||||
|
|
||||||
|
@override_settings(LOGIN_URL='helpdesk:login', SITE_ID=1)
|
||||||
|
def test_default_login_view(self):
|
||||||
|
"""Test that default login is used when LOGIN_URL is helpdesk:login"""
|
||||||
|
response = self.client.get(reverse('helpdesk:login'))
|
||||||
|
self.assertTemplateUsed(response, 'helpdesk/registration/login.html')
|
||||||
|
|
||||||
|
@override_settings(LOGIN_URL=None, SITE_ID=1)
|
||||||
|
def test_login_url_none(self):
|
||||||
|
"""Test that default login is used when LOGIN_URL is None"""
|
||||||
|
response = self.client.get(reverse('helpdesk:login'))
|
||||||
|
self.assertTemplateUsed(response, 'helpdesk/registration/login.html')
|
@ -13,7 +13,7 @@ from django.contrib.auth import views as auth_views
|
|||||||
from django.views.generic import TemplateView
|
from django.views.generic import TemplateView
|
||||||
|
|
||||||
from helpdesk import settings as helpdesk_settings
|
from helpdesk import settings as helpdesk_settings
|
||||||
from helpdesk.views import feeds, staff, public, kb
|
from helpdesk.views import feeds, staff, public, kb, login
|
||||||
|
|
||||||
|
|
||||||
class DirectTemplateView(TemplateView):
|
class DirectTemplateView(TemplateView):
|
||||||
@ -185,8 +185,7 @@ urlpatterns += [
|
|||||||
|
|
||||||
urlpatterns += [
|
urlpatterns += [
|
||||||
url(r'^login/$',
|
url(r'^login/$',
|
||||||
auth_views.LoginView.as_view(
|
login.login,
|
||||||
template_name='helpdesk/registration/login.html'),
|
|
||||||
name='login'),
|
name='login'),
|
||||||
|
|
||||||
url(r'^logout/$',
|
url(r'^logout/$',
|
||||||
|
21
helpdesk/views/login.py
Normal file
21
helpdesk/views/login.py
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
from django.conf import settings
|
||||||
|
from django.contrib.auth import views as auth_views
|
||||||
|
from django.contrib.auth.views import redirect_to_login
|
||||||
|
from django.shortcuts import resolve_url
|
||||||
|
|
||||||
|
|
||||||
|
default_login_view = auth_views.LoginView.as_view(
|
||||||
|
template_name='helpdesk/registration/login.html')
|
||||||
|
|
||||||
|
|
||||||
|
def login(request):
|
||||||
|
login_url = settings.LOGIN_URL
|
||||||
|
# Prevent redirect loop by checking that LOGIN_URL is not this view's name
|
||||||
|
if login_url and login_url != request.resolver_match.view_name:
|
||||||
|
if 'next' in request.GET:
|
||||||
|
return_to = request.GET['next']
|
||||||
|
else:
|
||||||
|
return_to = resolve_url('helpdesk:home')
|
||||||
|
return redirect_to_login(return_to, login_url)
|
||||||
|
else:
|
||||||
|
return default_login_view(request)
|
Loading…
Reference in New Issue
Block a user