通过python3.6 + django +django_cas_ng 实现python应用接入单点登录

吐一下槽

在公司推广python的时候,发现一直没有一个好用的python版本的cas客户端,这样就不能和java平起平坐了,也就只能写点简单的脚本了。哎。。。
通过python3.6 + django +django_cas_ng 实现python应用接入单点登录_第1张图片

环境准备

  • python: 3.0 + 吧,没有特殊要求
  • django_cas_ng: 这个用最新的吧, 我目前是4.1.1
  • django 3.0

安装

django_cas_ng的安装

# 这一步我简单说了,不是中单
- 官网下载包,记得最好用最新的呀
- python setup.py install

django的配置

# 修改setting.py的INSTALLED_APPS  MIDDLEWARE  
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    "django_cas_ng",
]
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django_cas_ng.middleware.CASMiddleware'
]
# 修改setting.py的 增加下面的配置

AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend',
    'django_cas_ng.backends.CASBackend'
)
CAS_SERVER_URL = "" # 你的cas server的地址
CAS_CHECK_NEXT= lambda _: True
CAS_VERSION = '3'

CAS_CHECK_NEXT 这个要加上,不然会一直报Non-local url is forbidden to be redirected to.
CAS_VERSION 这个要加上,并且最好用3 。不然不会执行退出操作

修改urls.py

# 增加下面的设置
from django.contrib import admin
from django.urls import path
import django_cas_ng.views
from . import views

urlpatterns = [
    path('', views.index, name='index'), # 不是必须的
    path('admin/', admin.site.urls), # 不是必须的
    path('accounts/login', django_cas_ng.views.LoginView.as_view(), name='cas_ng_login'),
    path('accounts/logout', django_cas_ng.views.LogoutView.as_view(), name='cas_ng_logout'),
]

创建对应的数据库表

python manage.py migrate

使用

  def get(self, request, *args, **kwargs):
        if request.user.is_authenticated:
            return render(request, 'index.html')
        else:
            return HttpResponseRedirect('/accounts/login')

跨域问题

因为cas server 是另个一地址(IP + Port), 所以当python应用重定向到cas server时会发生跨域问题。这时候解决方法如下:

  • 修改cas server 支持跨域
  • 把你的应用和cas server 放在一个nginx下面

时间紧迫,先写到这里,有问题联系我就行, qq群 630300475

你可能感兴趣的:(python)