当我们请求http://127.0.0.1的时候,来到/opt/stack/horizon/openstack_dashboard的url.py,查看该访问那个方法,看到该文件中有如下内容
url(r'^$', 'openstack_dashboard.views.splash', name='splash'),
于是查看views.py的splash,
[mw_shl_code=actionscript3,true]def splash(request):
if not request.user.is_authenticated():
raise exceptions.NotAuthenticated()
response = shortcuts.redirect(horizon.get_user_home(request.user))
if 'logout_reason' in request.COOKIES:
response.delete_cookie('logout_reason')
return response[/mw_shl_code]
该方法首先确认请求是否有权限,然后调转到用户需要到的地方,比如admin用户来到http://127.0.0.1/admin.
由于我们没有登陆,肯定会有异常,这个异常被horizon的中间件处理,处理程序是/opt/stack/horizon/horizon/middleware.py,其中有三个方法,分别处理请求、响应、异常。
查看处理异常的代码
[mw_shl_code=actionscript3,true]response = redirect_to_login(next_url, login_url=login_url,
redirect_field_name=field_name)
[/mw_shl_code]
说明该方法将请求重定向到别的地方了,通过print,我们可以看到其中某些参数的内容
# next_url /
# login_url http://localhost/auth/login
# field_name next
说明请求被定向到http://localhost/auth/login,这和我们在网页上看到的url是一样的。
http://localhost/auth/login这个请求来到/usr/lib/python2.7/site-packages/openstack_auth的url.py中,login对应views.py的login方法,login方法中有如下代码
[mw_shl_code=actionscript3,true]res = django_auth_views.login(request,
template_name=template_name,
authentication_form=form,
extra_context=extra_context,
**kwargs)[/mw_shl_code]
该方法来自/usr/lib/python2.7/site-packages/django/contrib/auth/views.py的login方法,该方法有如下代码
[mw_shl_code=actionscript3,true]auth_login(request, form.get_user())
return HttpResponseRedirect(redirect_to)[/mw_shl_code]
意思是登陆之后,定向到redirect_to,通过print,看到redirect_to的内容是/,这就需要我们在回到/opt/stack/horizon/openstack_dashboard的url.py中,还是views.py的splash方法,这时由于已经登陆,可以直接调转到用户需要显示的地方,比如http://localhost/auth/login。
这就是openstack的登陆过程,希望大家共同讨论
=======================================================
但是具体openstack查询数据库来验证用户密码是否正确的代码小弟还没找到,希望大牛能指点一二,小弟感激不尽
|