python3.5+django+django_cas_ng+python_cas 接入cas server(https)

看这一篇吧 https://blog.csdn.net/u014686399/article/details/105097217, 是最新的。这篇太老了

这两天废了九牛二虎之力完成了python3.5接入cas server, 废话少说,步骤如下:

1.基础环境

python 3.5.4
django 2.0
对接的cas server  3.5.2
     注:cas对外提供的是https
python的环境算是比较新的了,所以坑比较多。cas我偷懒了用了个老版本
 

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
  
   -------------------------------------------------------------------------------------------------
   这时候你要看django的日志了,因为很可能会报错的
    1、如果出现ImportError: cannot import name 'CASClient'
      说明你的python-cas安装不成功,或者是版本太低
    2、TypeError: __init__() missing 1 required positional argument: 'on_delete'
        找到你的python安装包的路径下的site-packages/django_cas_ng-3.5.0-py3.5.egg/django_cas_ng/models.py
        修改为:
   
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
    )
   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部分,最后:
      
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上,就说明你成功了
 
 

你可能感兴趣的:(python,cas,python3.x,django,django-cas)