python3.5+django+django_cas_ng+python_cas 接入cas server(https)
阿新 • • 發佈:2019-01-23
這兩天廢了九牛二虎之力完成了python3.5接入cas server, 廢話少說,步驟如下:
1.基礎環境
python | 3.5.4 |
django | 2.0 |
對接的cas server | 3.5.2 |
2、django對接cas環境的安裝
(1)安裝python-cas,這個建議下載1.2.0版本以上的 1.2.0版本的連結:https://pypi.python.org/pypi/python-cas/1.2.0 然後 解壓---> python setup.py install (2)安裝django_cas_ng 這個建議3.5.8以上,這時候坑就來了 3.5.8版本的連結: https://pypi.python.org/pypi/django-cas-ng 然後 解壓 ---> python setup.py install -------------------------------------------------------------------------------------------------3、django_cas_ng.ProxyGrantingTicket.date: (fields.E160) The options auto_now, auto_now_add, and default are mutually exclusive. Only one of these options may be present. 找到你的python安裝包的路徑下的site-packages/django_cas_ng-3.5.0-py3.5.egg/django_cas_ng/models.py 修改: 找到31行,刪除前面的add_now部分,最後:unique_together = ('session_key', 'user') session_key = models.CharField(max_length=255, blank=True, null=True) user = models.ForeignKey( settings.AUTH_USER_MODEL, related_name="+", null=True, blank=True,on_delete=models.PROTECT )
pgtiou = models.CharField(max_length=255, null=True, blank=True) pgt = models.CharField(max_length=255, null=True, blank=True)
date = models.DateTimeField(auto_now_add=True)
4、AttributeError: module 'django_cas_ng' has no attribute 'views'
找到你報錯的url.py,
修改:
import django_cas_ng.views
-------------------------------------------------------------------------------------------------
(3)配置的setting.py,其中AUTHENTICATION_BACKENDS可能沒有,需要你自行新增
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_cas_ng',
...
)
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
...
)
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'django_cas_ng.backends.CASBackend',
)
新增 CAS_SERVER_URL="cas server的地址"
新增 CAS_REDIRECT_URL="你網站的主頁"
(4)配置url.py,增加
url(r'^accounts/login$', django_cas_ng.views.login, name='cas_ng_login'),
url(r'^accounts/logout$', django_cas_ng.views.logout, name='cas_ng_logout'),
url(r'^accounts/callback$', django_cas_ng.views.callback, name='cas_ng_proxy_callback'),
(5)配置資料庫
首先檢視你的資料庫是否有,下表:
auth_group auth_group_permissions
auth_permission
auth_user
auth_user_groups
auth_user_user_permissions 要是沒有的話請執行: python manager.py makemigrations python manager.py migrate 然後檢視是否有: django_cas_ng_proxygrantingticket django_cas_ng_sessionticket 要是沒有的話,請執行: python manager.py makemigrations django_cas_ng python manager.py migrate django_cas_ng (6) 要是你的cas server 是http的,現在你就可以訪問http://django的ip+port/accounts/login,要是轉到cas上,就說明你成功了 要是你的cas server 是https的,請在django的主機是新增環境變數 export REQUESTS_CA_BUNDLE="證書的路徑" 這裡的證書必須是PEM格式的,否則會報requests.exceptions.SSLError: unknown error (_ssl.c:3165) 如果你的證書使用keytool轉換的,請再用下面的命令把之前的證書轉換為PEM格式的
openssl x509 -inform der -in server.cer -out server.pemaccounts/login
到此配置完畢,你可以訪問http://django的ip+port/accounts/login,要是轉到cas上,就說明你成功了