Python集成CAS单点登录方案 django2.1.9+django-cas-ng3.6.0
安装依赖
pip install django==2.1.9
pip install django-cas-ng==3.6.0
setting.py
ALLOWED_HOSTS = ['*']
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.contrib.auth.middleware.AuthenticationMiddleware',
'django_cas_ng.middleware.CASMiddleware',
]
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'django_cas_ng.backends.CASBackend',
)
CAS_SERVER_URL = 'http://127.0.0.1:8080/cas/login'
CAS_REDIRECT_URL = '/'
CAS_VERSION = '3'
CAS_IGNORE_REFERER = True
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
urls.py
from django.conf.urls import url
from django.contrib import admin
from django.urls import path
import django_cas_ng.views as casviews
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('login/',views.login),
path('logout/',casviews.LogoutView().get),
url(r'^accounts/login/', casviews.LoginView().get, name='cas_ng_login'),
url(r'^accounts/logout/', casviews.LogoutView().get, name='cas_ng_logout'),
path('accounts/callback/', casviews.CallbackView().get, name='cas_ng_callback'),
]
views.py:
from django.views.decorators.csrf import csrf_exempt
from django.contrib.auth.decorators import login_required
from django.http import HttpRequest,JsonResponse
from django.shortcuts import render,HttpResponse,HttpResponseRedirect,redirect,reverse
from base.loadConfig import BASE_CONFIG
from base.loadConfig import config
import base.functions
import log.log
@login_required()
def login(request:HttpRequest):
if request.user.is_authenticated:
username=str(request.user.username)
ip = "127.0.0.1"
if "HTTP_X_FORWARDED_FOR" in request.META.keys():
ip = request.META['HTTP_X_FORWARDED_FOR']
elif "X_FORWARDED_FOR" in request.META.keys():
ip = request.META['X_FORWARDED_FOR']
elif "REMOTE_ADDR" in request.META.keys():
ip = request.META["REMOTE_ADDR"]
else:
ip="127.0.0.1"
log.log.info("login - {} - {}".format(username,ip))
return JsonResponse({"username":username,"ip":ip})
def index(request:HttpRequest):
return redirect(config["cas-BaseUrl"])