diff --git a/axes/signals.py b/axes/signals.py index 66f9696..60aab6c 100644 --- a/axes/signals.py +++ b/axes/signals.py @@ -27,7 +27,11 @@ log = logging.getLogger(settings.AXES_LOGGER) user_locked_out = Signal(providing_args=['request', 'username', 'ip_address']) def request_meta_get(request, key, default_value=None): - return getattr(request, 'META', {}).get(key, default_value) + meta = getattr(request, 'META', {}) + if not meta: + # oauth2_provider package stores META in headers + meta = getattr(request, 'headers', {}) + return meta.get(key, default_value) @receiver(user_login_failed) diff --git a/axes/utils.py b/axes/utils.py index 3af856f..bbc1c78 100644 --- a/axes/utils.py +++ b/axes/utils.py @@ -53,6 +53,8 @@ def get_ip(request): """Parse IP address from REMOTE_ADDR or AXES_REVERSE_PROXY_HEADER if AXES_BEHIND_REVERSE_PROXY is set.""" request_meta = getattr(request, "META", {}) + if not request_meta: + request_meta = getattr(request, "headers", {}) if settings.AXES_BEHIND_REVERSE_PROXY: # For requests originating from behind a reverse proxy, # resolve the IP address from the given AXES_REVERSE_PROXY_HEADER.