django_openstack_auth源码分析与集成

来源:互联网 发布:用手充电软件下载 编辑:程序博客网 时间:2024/05/20 19:15

前言

最近做一个比较简单的WEB应用,展示一些openstack简单的内容,认证总是要集成的,看了下django_openstack_auth组件,它本身是可以作为django应用的认证后端的,于是打算把它集成进来。

集成

翻了官方文档,首先做一些配置
安装比较简单:

Run pip install django_openstack_auth.

Add openstack_auth to settings.INSTALLED_APPS.

Add ‘openstack_auth.backend.KeystoneBackend’ to your settings.AUTHENTICATION_BACKENDS, e.g.:

AUTHENTICATION_BACKENDS = (‘openstack_auth.backend.KeystoneBackend’,)
Configure your API endpoint(s) in settings.py:

OPENSTACK_KEYSTONE_URL = “http://example.com:5000/v3”
Include ‘openstack_auth.urls’ somewhere in your urls.py file.

Use it as you would any other Django auth backend.
这个步骤很简单,主要是页面应该如何集成进去呢?
看openstack_auth源码
urls.py

 url(r"^login/$", "login", name='login'), url(r"^logout/$", 'logout', name='logout'),

可以看到有URL地址,进去views.py看login方法,
大致流程如下:

Created with Raphaël 2.1.0开始POST且SSO?处理SSO登录结束取regions组form组template(auth/login.html)调用login(X)存sessionyesno

可见要自行准备auth/login.html模板,于是写了个模板,但是里面FORM怎么写呢,一开始自己写了FORM,写了username等属性,按照post到auth/login去登录,一直失败。
仔细思考,感觉这样流程也是不对的,跟form根本没关联,流程有问题。于是看了TEST中的例子,恍然大悟
在login.html里写如下FORM即可

<form method="post" action="/auth/login/">            {% csrf_token %}            {{ form.as_p }}<button class="btn" type="submit">登录</button><input type="hidden" name="next" value="{{ next }}" />

之后发现果然可以登录了~~

登录检验

对于未登录的调用,应跳转到登录界面去,如下去做

@login_required(login_url="/auth/login/")

在函数名称上都加上这个即可,如果没有登录,则会自动跳转。

setting里还加了

if not WEBROOT.endswith('/'):WEBROOT += '/'if LOGIN_URL is None:LOGIN_URL = WEBROOT + 'auth/login/'if LOGOUT_URL is None:LOGOUT_URL = WEBROOT + 'auth/logout/'if LOGIN_REDIRECT_URL is None:LOGIN_REDIRECT_URL = WEBROOT

至此,登录问题基本搞定~

参考

http://docs.openstack.org/developer/django_openstack_auth/installation.html#installation

0 0
原创粉丝点击