Python中django_cas_ng如何对接CAS单点登录系统?
项目后端是 django 前端是 vue , 作为一个子系统 , 被集成在 Vue 的一个父系统里, 在第一次进入主系统的时候, 切换到我的系统 cas 去做登录验证, 请求中携带了父系统的地址, 校验成功后会再重定向到父系统, 由于子系统时通过 ifrom 嵌套的 会造成父系统里显示两层页面的问题 , 有没有大佬对接过 cas 的 给支个招 .
Python中django_cas_ng如何对接CAS单点登录系统?
1 回复
要对接CAS单点登录,首先安装django_cas_ng,然后在settings.py里配置。核心是设置认证后端、CAS服务器地址和回调URL。
1. 安装和基础配置
pip install django_cas_ng
INSTALLED_APPS = [
...,
'django_cas_ng',
]
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'django_cas_ng.backends.CASBackend',
)
# CAS服务器地址(换成你的CAS服务地址)
CAS_SERVER_URL = 'https://your-cas-server.com/cas/'
# 服务地址(你的Django应用地址)
CAS_APPLY_ATTRIBUTES_TO_USER = True
3. 添加URL路由
在项目的urls.py里添加:
from django.urls import path, include
urlpatterns = [
...,
path('accounts/', include('django_cas_ng.urls')),
]
4. 登录和登出视图
在需要登录的地方,用@login_required装饰器保护视图:
from django.contrib.auth.decorators import login_required
from django.shortcuts import render
@login_required
def protected_view(request):
return render(request, 'protected.html')
登录直接访问 /accounts/login,登出访问 /accounts/logout。
5. 获取用户信息
登录后,CAS属性会保存在request.session里:
def profile_view(request):
attributes = request.session.get('attributes', {})
# 例如:email = attributes.get('email')
return render(request, 'profile.html', {'attributes': attributes})
6. 本地开发配置
如果本地测试,可以在settings.py临时设置:
# 仅用于开发,跳过CAS验证
if DEBUG:
CAS_SERVER_URL = 'https://fake-cas-for-testing.com/cas/'
CAS_CHECK_NEXT = False
这样就接好了。主要就是配置好AUTHENTICATION_BACKENDS和CAS_SERVER_URL,路由加上,然后用@login_required保护需要登录的页面。用户访问受保护页面时会自动跳转到CAS登录。
总结:配好后端和URL,加路由,用装饰器保护视图。

