通过django_cas_ng怎么完成登录的呢???

环境介绍
  • cas插件使用的是django_cas_ng 3.6.0
  • pyhton 3.7.3
  • django 2.2.3
先看看 cas的工作流程

借用大哥的一张图
在这里插入图片描述
假设A、B系统对接了一个cas:

  • 登录A系统

 1. 当请求到了A系统的程序,首先经过的应该是cas_client,cas_client发现你的请求没有ticket,就重定向到cas的地址进行登录也就是输入用户和密码的页面(重定向会记录跳转前的地址)
 2.登录完成后,cas_server为A办法TGC和TGT(第一步要的ticket),同时会缓存TGC到cookie里(server和path都是访问casserver的路径)
 3.跳转回A服务,此时会带上ticket,cas_client拿着ticket去cas_server去验证,这个ticket是不是有效的,如果有效,就会在服务端产生一个session,然后在浏览器产生一个cookie(A系统的地址和路径)。 然后把对应的资源返回给浏览器,你就能享受A系统的服务了
 4.再次访问A服务,此时会带上cookie,cas_client根据这个cookie就知道你已经登录了,然后就会返回A的资源
  • 登录B系统
1.登录B时,不会使用A的cookie,所以就两手空空的到达了cas client,然后cas client会重定向到cas_server,而此时由于之前的TGC已经缓存到了浏览器,所以此时访问cas_server会带上TGC。 cas_server拿到tgc后,就知道已经登录了。
2.然后给B颁发一个TGT,然后重定向到B系统带上TGT,此时cas_client拿到这个tgt后,去cas那边验证一下。如果有效,就会在服务端产生一个session,然后在浏览器产生一个cookie(B系统的地址和路径)。然后把对应的资源返回给浏览器,你就能享受B系统的服务了
3.再次访问B服务,此时会带上cookie,cas_client根据这个cookie就知道你已经登录了,然后就会返回B的资源

如果你还是没有看明白,可以看一下大神的文章:

  • https://www.cnblogs.com/codestory/p/5512104.html
  • https://www.cnblogs.com/lihuidu/p/6495247.html
django_cas在这个过程中做了什么呢
  • 第一次登录
    在这里插入图片描述
1、backend是我们在setting文件中指定的,我们有可能会有很多,django会拿着入参和backend的函数比较,看看那个backend能使用这个入参
代码的位置:django\contrib\auth\__init__.py 的 authenticate函数
2、不出意外会调用到django_cas_ng的CASBackend,CASBackend会去cas server进行TGT验证,验证通过后会在auth_user表中创建一条记录
代码的位置:site-packages\django_cas\backends.py 的CASBackend

auth_user表
在这里插入图片描述

  • 继续
    在这里插入图片描述
1、首次登陆时request.user,是被赋予了一个AnonymousUser,AnonymousUser的is_authenticated方法是返回false的。登陆后创建的user的is_authenticated是返回true的
2、django_cas_ng_sessionticket表是在登出的时候使用的,根据sessionid(cookie)获取TGT,然后带着TGT去cas server去做登出操作
3、当再次登录的时候,django的session Middleware会根据cookie中的sessionid创建一个user用户,并赋值给request.user。所以我们在使用request.user.is_authenticated()的时候,就会返回True,也就登录成功了

如果对本文有疑问或者发现不对的地方,希望能给予评论或者进群630300475,讨论一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django_celery_beat是一个django应用程序,它允许您使用celery定期运行周期性任务。这些周期性任务可以是一次性的或循环的,你可以设置它们在指定的时间间隔内自动运行,也可以设置它们在特定的时间运行。 要使用django_celery_beat,请按照以下步骤操作: 1. 安装django_celery_beat: ``` pip install django_celery_beat ``` 2. 在settings.py中添加以下代码: ``` INSTALLED_APPS = [ # ... 'django_celery_beat', ] CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler' ``` 3. 在项目的urls.py文件中添加以下代码: ``` from django.urls import path from django_celery_beat.views import ( PeriodicTaskListView, PeriodicTaskCreateView, PeriodicTaskUpdateView, PeriodicTaskDeleteView, PeriodicTaskDetailView, ) urlpatterns = [ # ... path('celery/periodic-tasks/', PeriodicTaskListView.as_view(), name='periodic_task_list'), path('celery/periodic-task/add/', PeriodicTaskCreateView.as_view(), name='periodic_task_create'), path('celery/periodic-task/<int:pk>/', PeriodicTaskDetailView.as_view(), name='periodic_task_detail'), path('celery/periodic-task/<int:pk>/update/', PeriodicTaskUpdateView.as_view(), name='periodic_task_update'), path('celery/periodic-task/<int:pk>/delete/', PeriodicTaskDeleteView.as_view(), name='periodic_task_delete'), ] ``` 4. 在celery.py文件中添加以下代码: ``` from celery import Celery from django.conf import settings app = Celery('my_project') app.config_from_object('django.conf:settings', namespace='CELERY') app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) ``` 5. 在tasks.py文件中创建您的任务,例如: ``` from celery import shared_task @shared_task def my_task(): # Do something here ``` 6. 创建周期性任务,您可以使用Django admin或创建它们的视图。 现在,您已经可以在django中使用celery定期运行周期性任务了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值