I had this problem in folsom branch. It happens because option creation in a select tag of the login form currently uses endpoint address as a value. In case if we have equal endpoints with different regions, we can't get a region by this value. In folsom branch authenticate using django-backend now. So, If you want fix this bug you must change this code:
/usr/local/lib/python2.7/dist-packages/openstack_auth/forms.py
@staticmethod
def get_region_choices(): default_region = (settings.OPENSTACK_KEYSTONE_URL, "Default Region")
- return getattr(settings, 'AVAILABLE_REGIONS', [default_region])
+ regions = getattr(settings, 'AVAILABLE_REGIONS', [default_region])
+ options = []
+ return [('_'.join([region[0], region[1]]), region[1]) for region in regions]
@sensitive_variables()
def clean(self):
username = self.cleaned_data.get('username')
password = self.cleaned_data.get('password')
- region = self.cleaned_data.get('region')
+ region = self.cleaned_data.get('region').split('_')[0]
/usr/local/lib/python2.7/dist-packages/openstack_auth/views.py
@never_cache
def login(request):
""" Logs a user in using the :class:`~openstack_auth.forms.Login` form. """
# Get our initial region for the form.
initial = {}
current_region = request.session.get('region_endpoint', None)
- requested_region = request.GET.get('region', None)
+ requested_region = requested_region_name = None
+ requested_option = request.POST.get('region', None)
+ if requested_option is not None:
+ requested_region, requested_region_name = requested_option.split('_')
…
if request.user.is_authenticated(): set_session_from_user(request, request.user)
region = request.user.endpoint
region_name = dict(Login.get_region_choices()).get(region) request.session['region_endpoint'] = region
- request.session['region_name'] = region_name
+ request.session['region_name'] = requested_region_name
I had this problem in folsom branch. It happens because option creation in a select tag of the login form currently uses endpoint address as a value. In case if we have equal endpoints with different regions, we can't get a region by this value. In folsom branch authenticate using django-backend now. So, If you want fix this bug you must change this code:
/usr/local/ lib/python2. 7/dist- packages/ openstack_ auth/forms. py choices( ):
default_ region = (settings. OPENSTACK_ KEYSTONE_ URL, "Default Region") REGIONS' , [default_region]) REGIONS' , [default_region]) [region[ 0], region[1]]), region[1]) for region in regions]
@staticmethod
def get_region_
- return getattr(settings, 'AVAILABLE_
+ regions = getattr(settings, 'AVAILABLE_
+ options = []
+ return [('_'.join(
@sensitive_ variables( ) data.get( 'username' ) data.get( 'password' ) data.get( 'region' ) data.get( 'region' ).split( '_')[0]
def clean(self):
username = self.cleaned_
password = self.cleaned_
- region = self.cleaned_
+ region = self.cleaned_
/usr/local/ lib/python2. 7/dist- packages/ openstack_ auth/views. py `~openstack_ auth.forms. Login` form. """ session. get('region_ endpoint' , None) GET.get( 'region' , None) region_ name = None POST.get( 'region' , None) region_ name = requested_ option. split(' _')
@never_cache
def login(request):
""" Logs a user in using the :class:
# Get our initial region for the form.
initial = {}
current_region = request.
- requested_region = request.
+ requested_region = requested_
+ requested_option = request.
+ if requested_option is not None:
+ requested_region, requested_
…
if request. user.is_ authenticated( ):
set_session_ from_user( request, request.user) user.endpoint get_region_ choices( )).get( region)
request. session[ 'region_ endpoint' ] = region session[ 'region_ name'] = region_name session[ 'region_ name'] = requested_ region_ name
region = request.
region_name = dict(Login.
- request.
+ request.