Last active
November 25, 2017 15:33
-
-
Save ryanwitt/130583 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from django.http import HttpResponseRedirect | |
from django.conf import settings | |
from re import compile | |
EXEMPT_URLS = [compile(settings.LOGIN_URL.lstrip('/'))] | |
if hasattr(settings, 'LOGIN_EXEMPT_URLS'): | |
EXEMPT_URLS += [compile(expr) for expr in settings.LOGIN_EXEMPT_URLS] | |
class LoginRequiredMiddleware: | |
""" | |
Middleware that requires a user to be authenticated to view any page other | |
than LOGIN_URL. Exemptions to this requirement can optionally be specified | |
in settings via a list of regular expressions in LOGIN_EXEMPT_URLS (which | |
you can copy from your urls.py). | |
Requires authentication middleware and template context processors to be | |
loaded. You'll get an error if they aren't. | |
""" | |
def process_request(self, request): | |
assert hasattr(request, 'user'), "The Login Required middleware\ | |
requires authentication middleware to be installed. Edit your\ | |
MIDDLEWARE_CLASSES setting to insert\ | |
'django.contrib.auth.middleware.AuthenticationMiddleware'. If that doesn't\ | |
work, ensure your TEMPLATE_CONTEXT_PROCESSORS setting includes\ | |
'django.core.context_processors.auth'." | |
if not request.user.is_authenticated(): | |
path = request.path_info.lstrip('/') | |
if not any(m.match(path) for m in EXEMPT_URLS): | |
return HttpResponseRedirect(settings.LOGIN_URL) |
👍 thanks!
👍 Just found and used this with no problems on a Django 1.6 site. Nice.
Works great in 1.8! 😺
nobiki/login_required_middleware.py
I changed this way on the site of Django 1.10, and now it works without problems. Thank you.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This is great, thanks.
Just an fyi, there's a slight typo:
'django.contrib.auth.middlware.AuthenticationMiddleware'
should be
'django.contrib.auth.middleware.AuthenticationMiddleware'
There's an e missing in "middleware".