misc: switch to class-based login/logout views (#41633)
This commit is contained in:
parent
b9109b635d
commit
87fa6a012d
|
@ -1,9 +1,10 @@
|
||||||
{% extends "bijoe/base.html" %}
|
{% extends "bijoe/base.html" %}
|
||||||
|
{% load i18n %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<form method="post">
|
<form method="post">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ form }}
|
{{ form.as_p }}
|
||||||
<input type="submit" name="Login"/>
|
<input type="submit" value="{% trans 'Log in' %}" />
|
||||||
</form>
|
</form>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -21,12 +21,14 @@ from django.shortcuts import resolve_url
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.views.generic import ListView, View
|
from django.views.generic import ListView, View
|
||||||
from django.http import HttpResponse, HttpResponseRedirect
|
from django.http import HttpResponse, HttpResponseRedirect
|
||||||
|
from django.utils.decorators import method_decorator
|
||||||
from django.utils.http import quote
|
from django.utils.http import quote
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
from django.contrib.auth import logout as auth_logout
|
from django.contrib.auth import logout as auth_logout
|
||||||
from django.contrib.auth import views as auth_views
|
from django.contrib.auth import views as auth_views
|
||||||
from django.contrib.auth.views import redirect_to_login
|
from django.contrib.auth.views import redirect_to_login
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
|
from django.views.decorators.cache import never_cache
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from mellon.utils import get_idps
|
from mellon.utils import get_idps
|
||||||
|
@ -96,21 +98,28 @@ homepage = HomepageView.as_view()
|
||||||
menu_json = MenuJSONView.as_view()
|
menu_json = MenuJSONView.as_view()
|
||||||
|
|
||||||
|
|
||||||
def login(request, *args, **kwargs):
|
class LoginView(auth_views.LoginView):
|
||||||
if any(get_idps()):
|
template_name = 'bijoe/login.html'
|
||||||
if not 'next' in request.GET:
|
|
||||||
return HttpResponseRedirect(resolve_url('mellon_login'))
|
def get(self, request, *args, **kwargs):
|
||||||
return HttpResponseRedirect(resolve_url('mellon_login') + '?next='
|
if any(get_idps()):
|
||||||
+ quote(request.GET.get('next')))
|
if 'next' not in request.GET:
|
||||||
return auth_views.login(request, template_name='bijoe/login.html')
|
return HttpResponseRedirect(resolve_url('mellon_login'))
|
||||||
|
return HttpResponseRedirect(
|
||||||
|
resolve_url('mellon_login') + '?next=' + quote(request.GET.get('next'))
|
||||||
|
)
|
||||||
|
return super(LoginView, self).get(request, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
def logout(request, next_page=None):
|
login = LoginView.as_view()
|
||||||
if any(get_idps()):
|
|
||||||
return HttpResponseRedirect(resolve_url('mellon_logout'))
|
|
||||||
auth_logout(request)
|
class LogoutView(auth_views.LogoutView):
|
||||||
if next_page is not None:
|
@method_decorator(never_cache)
|
||||||
next_page = resolve_url(next_page)
|
def dispatch(self, request, *args, **kwargs):
|
||||||
else:
|
if any(get_idps()):
|
||||||
next_page = '/'
|
return HttpResponseRedirect(resolve_url('mellon_logout'))
|
||||||
return HttpResponseRedirect(next_page)
|
return super(LogoutView, self).dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
logout = LogoutView.as_view()
|
||||||
|
|
|
@ -61,8 +61,7 @@ def test_superuser(app, admin):
|
||||||
assert 'foo([{' in resp.text
|
assert 'foo([{' in resp.text
|
||||||
app.get('/', status=200)
|
app.get('/', status=200)
|
||||||
app.get('/visualization/', status=200)
|
app.get('/visualization/', status=200)
|
||||||
resp = app.get('/accounts/logout/', status=302)
|
resp = app.get('/accounts/logout/', status=(200, 302))
|
||||||
assert resp.location == '/'
|
|
||||||
|
|
||||||
|
|
||||||
def test_visualizations_json_api(schema1, app, admin, settings):
|
def test_visualizations_json_api(schema1, app, admin, settings):
|
||||||
|
|
Loading…
Reference in New Issue