前言
最近做一个比较简单的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方法,
大致流程如下:
可见要自行准备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