misc: switch to class-based login/logout views (#41633)

This commit is contained in:
Frédéric Péters 2020-04-13 11:15:06 +02:00
parent b9109b635d
commit 87fa6a012d
3 changed files with 30 additions and 21 deletions

View File

@ -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 %}

View File

@ -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()

View File

@ -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):