From 44e26bb8de5982bc1f8d210a0a177dfbbd2daa50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9ophile=20Bastian?= Date: Thu, 10 May 2018 11:42:52 +0200 Subject: [PATCH] Add capture_login_admin view This fixes a redirection loop causing an authenticated user which is *not* staff accessing /admin to be loop-redirected between /admin -> /admin/login -> /accounts/login Also include some hideous basic page to show a message. This should not be a problem; a non-admin user accessing /admin deserves hurting their eyes. --- .../templates/allauth_ens/simple_message.html | 32 +++++++++++++++++++ allauth_ens/views.py | 20 ++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 allauth_ens/templates/allauth_ens/simple_message.html diff --git a/allauth_ens/templates/allauth_ens/simple_message.html b/allauth_ens/templates/allauth_ens/simple_message.html new file mode 100644 index 0000000..2cb2d40 --- /dev/null +++ b/allauth_ens/templates/allauth_ens/simple_message.html @@ -0,0 +1,32 @@ +{% load i18n static %} +{% load account allauth_ens %} + + + + + + Error{% if request.site.name %} ยท {{ request.site.name }}{% endif %} + + + + + +
+ {{ message }} +
+ + diff --git a/allauth_ens/views.py b/allauth_ens/views.py index ea1a343..83036b7 100644 --- a/allauth_ens/views.py +++ b/allauth_ens/views.py @@ -1,5 +1,8 @@ import django from django.views.generic import RedirectView +from django.contrib import admin +from django.shortcuts import render + if django.VERSION >= (1, 10): from django.urls import reverse_lazy @@ -23,3 +26,20 @@ class CaptureLogout(RedirectView): capture_logout = CaptureLogout.as_view() + + +def capture_login_admin(request): + """ Redirect the user to allauth login page if they are not logged in, or + fails and display a message if they are logged in *but* are not + administrators """ + + if admin.site.has_permission(request): + return capture_login(request) + + context = { + 'message': ("The account you're authenticated with is not an " + "administrator account."), + } + return render(request, + "allauth_ens/simple_message.html", + context=context)