6ae1f5e21d
The "request" attribute is not available in openstack_auth.backend.KeystoneBackend.get_user when session data is restored and it's the first request to happen after a server restart. As stated by the function document, the "request" attribute needs to be monkey-patched by openstack_auth.utils.patch_middleware_get_user for this function to work properly. This should happen in openstack_auth.urls at import time. But there is nowhere in Horizon where this module is imported at startup. It's only introspected by openstack_dashboard.urls due to AUTHENTICATION_URLS setting. Without this monkey-patching, the whole authentication mechanism falls back to "AnonymousUser" and you will get redirected to the login page due to horizon.exceptions.NotAuthenticated being raised by horizon.decorators.require_auth as request.user.is_authenticated will be False. But if a user requests a page under auth/, it will have the side-effect of monkey-patching django.contrib.auth.middleware as expected. This means that once this request is completed, all following requests to pages other than the ones under auth/ will have there sessions properly restored and you will be properly authenticated. Therefore this change introduces a dummy middleware which sole purpose is to perform this monkey-patching as early as possible. There is also some cleanup to get rid of the previous attempts at monkeypatching. Closes-bug: #1764622 [backport specific notice] Queens horizon supports Django 1.8 and 1.11. The key point is Django 2.0 is not supported. Django 2.0 dropped the legacy Django middleware interface and the new interface is not supported in Django 1.8. Thus, this backport changes OpenstackAuthMonkeyPatchMiddleware in openstack_auth/middlware.py to use the legacy middleware interface. Conflicts: openstack_dashboard/settings.py openstack_dashboard/test/helpers.py Change-Id: Ib9912090a87b716e7f5710f6f360b0df168ec2e3 (cherry picked from commit |
||
---|---|---|
.. | ||
conf | ||
templates/auth | ||
unit | ||
__init__.py | ||
data_v2.py | ||
data_v3.py | ||
settings.py | ||
urls.py |