Implement redirects after login (using the next parameter)

This commit is contained in:
Martin Green 2022-06-25 16:13:02 +01:00
parent 74a5125cf9
commit b3d9e81499

@ -1,10 +1,11 @@
from builtins import str from builtins import str
from django.conf import settings from django.conf import settings
from django.shortcuts import render from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login, logout from django.contrib.auth import authenticate, login, logout
from django.contrib.auth import forms as auth_forms from django.contrib.auth import forms as auth_forms
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.utils.http import is_safe_url
"""This enforces the login requirement for non-public pages using """This enforces the login requirement for non-public pages using
the decorator mechanism. the decorator mechanism.
@ -70,8 +71,20 @@ def expologin(request):
try: try:
login(request, user) login(request, user)
# Should do the ?next= stuff here.. # Should do the ?next= stuff here..
return render(request, 'tasks.html', {}) return redirect_after_login(request)
except: except:
return render(request, 'errors/generic.html', {}) return render(request, 'errors/generic.html', {})
def redirect_after_login(request):
nxt = request.GET.get("next", None)
if nxt is None:
return redirect(settings.LOGIN_REDIRECT_URL)
elif not is_safe_url(
url=nxt,
allowed_hosts={request.get_host()},
require_https=request.is_secure()):
return redirect(settings.LOGIN_REDIRECT_URL)
else:
return redirect(nxt)