一、准备下载安装文件
hue-4.2.0.tgz
django-cas-ng-3.4.2.tar.gz
tar -zxvf hue-4.2.0.tgz
tar -zxvf django-cas-ng-3.4.2.tar.gz
mv django-cas-ng-3.4.2 hue-4.2.0/desktop/core/ext-py/
修改:django_cas_ng/views.py "{'url': next_page_url}"->"{'service': next_page_url}"
def _logout_url(request, next_page=None):
"""Generates CAS logout URL"""
url = urllib_parse.urljoin(settings.CAS_SERVER_URL, 'logout')
if next_page:
protocol = get_protocol(request)
host = request.get_host()
next_page_url = urllib_parse.urlunparse(
(protocol, host, next_page, '', '', ''),
)
url += '?' + urllib_parse.urlencode({'service': next_page_url})
return url
二、编译
cd hue-4.2.0
make clean
make apps
三、配置
3.1 修改文件:middleware.py
vim desktop/core/src/desktop/middleware.py
import django_cas_ng.views
DJANGO_VIEW_AUTH_WHITELIST = [
django_cas_ng.views.login,
django_cas_ng.views.logout,
django.views.static.serve,
desktop.views.is_alive,
] 说明:注意顺序
3.2 修改文件:settings.py
vim desktop/core/src/desktop/settings.py
import后接着加入
CAS_SERVER_URL='https://XXX.com/cas/login'
CAS_SERVER_URL_LOGOUT='https://XXX.com/cas/logout'
MIDDLEWARE_CLASSES = [
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django_cas_ng.middleware.CASMiddleware',
....
]注意顺序
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_cas_ng', //加入这一行
....
]
3.3 修改文件:urls.py(这个极为重要,在这儿遇到很大的坑)
vim desktop/core/src/desktop/urls.py
dynamic_patterns = patterns('desktop.auth.views',
(r'^hue/accounts/loginx/$', 'dt_login'),
#(r'^accounts/login/$', 'dt_login_old'), # Deprecated
#(r'^accounts/logout/$','django_cas_ng.views.login' ),
(r'^hue/accounts/logout/$', 'dt_logout', {'next_page': '/'}),
(r'^profile$', 'profile'),
(r'^login/oauth/?$', 'oauth_login'),
(r'^login/oauth_authenticated/?$', 'oauth_authenticated'),
)
在上面紧接着添加:
dynamic_patterns += patterns('',
(r'^hue/accounts/login/$', 'django_cas_ng.views.login'),
(r'^accounts/logout/$', 'django_cas_ng.views.logout'),
)
3.4 修改文件:backend.py
vim desktop/core/src/desktop/auth/backend.py
开头加入import ,class加入到文件最后
from django.conf import settings
from django_cas_ng.backends import _verify
from django_cas_ng.signals import cas_user_authenticated
class CASBackend(object):
"""CAS authentication backend"""
def authenticate(self, ticket, service, request):
"""Verifies CAS ticket and gets or creates User object"""
username, attributes = _verify(ticket, service)
if attributes:
request.session['attributes'] = attributes
if not username:
return None
try:
user = User.objects.get(username=username)
created = False
except User.DoesNotExist:
#check if we want to create new users, if we don't fail auth
create = getattr(settings, 'CAS_CREATE_USER', True)
if not create:
return None
#user will have an "unusable" password
user = User.objects.create_user(username, '')
#user.save()
created = True
default_group = get_default_user_group()
if default_group is not None:
user.groups.add(default_group)
user = rewrite_user(user)
user.save()
#send the 'cas_user_authenticated' signal
cas_user_authenticated.send(
sender=self,
user=user,
created=created,
attributes=attributes,
ticket=ticket,
service=service,
)
return user
def get_user(self, user_id):
"""Retrieve the user's entry in the User model if it exists"""
try:
return rewrite_user(User.objects.get(pk=user_id))
except User.DoesNotExist:
return None
3.5 修改文件:hue.ini
vim desktop/conf/hue.ini
[auth]
backend=desktop.auth.backend.CASBackend
[desktop]
redirect_whitelist=^\/.*$,^.*\/cas\/login.*$,^.*\/cas\/logout.*$
port:8888
四、授权当前目录
chmod -R 7777 .
QA:
Q: NoReverseMatch: Reverse for 'desktop.auth.views.dt_login' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
A: 5修改文件:urls.py
(r'^hue/accounts/loginx/$', 'dt_login'), 这一行不了屏蔽,loginx 写成login2 login3...也行
Q: 不能注销登录,一注销就自动登录
A: django_cas_ng/views.py文件注销路径和cas路径一样.我这里不能用url用service
Q:一直报 没有model django_cas_ng
A: pip list 查看有没有django_cas_ng 没有的话 使用命令python setup.py install安装。如果安装过了,步骤完全安装上面文档写的,做了,就看一下你的urls.py文件和我的一样不,调整一下!
AAAAA:完整的按照上面配置是可以成功的。看仔细了和原文里保持一致的规范别人空几格你也前面跟着空几格。