`
xiaolin0199
  • 浏览: 571126 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

django实现双系统用户验证原理

 
阅读更多

django实现登录原理

写道
django自带auth模块,可实现用户验证登录
当用户登录了网站,django通过两个中间键验证用户登录:
django.contrib.sessions.middleware.SessionMiddleware 和
django.contrib.auth.middleware.AuthenticationMiddleware
写道
1.当用户登录成功,服务器生成一个sessionid,保存于数据库,并写到用户浏览器cookie中
2.用户再次访问,首先中间键SessionMiddleware会读取这个名为sessionid的cookie,根据该值查询数据库,获取用户id,生成一个session对象
3.然后中间建AuthenticationMiddleware根据session对象获取用户user对象,保存成request.user
4.当处理对应的视图函数时,request中就保存的相应的user对象,可判断是否登录

 

写道
中间建AuthenticationMiddleware
文件:django/contrib/auth/middleware.py
from django.contrib import auth
from django.core.exceptions import ImproperlyConfigured


class LazyUser(object):
    def __get__(self, request, obj_type=None):
        if not hasattr(request, '_cached_user'):
            from django.contrib.auth import get_user
            request._cached_user = get_user(request)
        return request._cached_user


class AuthenticationMiddleware(object):
    def process_request(self, request):
        assert hasattr(request, 'session'), "The Django authentication middleware requires session middleware to be installed. Edit your MIDDLEWARE_CLASSES setting to insert 'django.contrib.sessions.middleware.SessionMiddleware'."
        request.__class__.user = LazyUser()
        return None

 

实现双系统用户验证原理

写道
要实现双系统用户验证,就不按正常的django验证流程,自己重写一个登录验证的中间件
具体实现原理:
用户请求访问系统A,系统A中间件同样首先读取相应的cookie值。得到cookie值后,不是像正常的流程一样查询数据库获取user对象
而且将该值发送给系统B,由系统B验证,如果系统B验证通过,则把该用户的username发送过来,如果没通过,则发送空值
系统A获取username后,去自己的auth_user表中查找,如果没有,则创建一个user对象(get_or_create)
最后将user对象保存于request.user中

 

具体操作

写道
1.setting文件中中间件'django.contrib.auth.middleware.AuthenticationMiddleware',
改成自己的中间件'myauth.middleware.AuthenticationMiddleware',
MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    #'django.contrib.auth.middleware.AuthenticationMiddleware',
    'myauth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)

 

写道
2.创建app myauth, 并有文件middleware.py

 

myauth/middleware.py

from django.conf import settings
from django.contrib.auth.models import AnonymousUser, User



class LazyUser(object):
    def __get__(self, request, obj_type=None):
        if not hasattr(request, '_cached_user'):
            #from django.contrib.auth import get_user
            request._cached_user = get_user(request)
        return request._cached_user


class AuthenticationMiddleware(object):
    def process_request(self, request):
        assert hasattr(request, 'session'), "The Django authentication middleware requires session middleware to be installed. Edit your MIDDLEWARE_CLASSES setting to insert 'django.contrib.sessions.middleware.SessionMiddleware'."
        request.__class__.user = LazyUser()


def get_user(request):
    session_key = request.COOKIES.get(settings.SESSION_COOKIE_NAME, None)
    user_dict = get_user_from_icnet(session_key)
    if user_dict:
        user, iscreate = User.objects.get_or_create(username=user_dict['username'])
    else:
        user = AnonymousUser()
    return user

def get_user_from_icnet(session_key):
    user_dict = {'username': 'test'}
    return user_dict

 

 

分享到:
评论

相关推荐

    django channels实战(websocket底层原理和案例)

    通过理解WebSocket的底层原理和Django Channels的工作机制,我们可以创建出交互性强、用户体验良好的现代Web应用程序。实际项目中,结合Django的其他功能,如ORM和模板系统,可以构建出更复杂的实时应用。

    python加django加websocket实现即时通讯

    在IT行业中,实时通信已经成为许多应用程序的核心需求,无论是在线聊天、游戏、股票交易还是协作工具。...开发者只需要理解WebSocket的基本原理,熟悉Django框架,就可以开始创建自己的实时Web应用。

    使用django+zeromq+tornado实现基于消息机制的websocket

    在这个项目中,Django主要负责处理HTTP请求和响应,提供数据库交互,以及处理用户认证和权限控制等任务。 2. WebSocket: WebSocket是一种在单个TCP连接上进行全双工通信的协议,允许服务器主动向客户端推送数据。...

    (Python+Django+Vue)在线图书借阅网站、图书管理系统 - 毕业设计 - 课程设计.zip

    Django内置了强大的用户认证系统,可以轻松实现用户注册、登录、权限管理等功能。用户信息存储在数据库中,登录状态通过session或cookie进行管理。 5. 图书管理功能: 系统需提供添加、删除、修改图书的功能。这...

    Django 实现 Websocket 广播、点对点发送消息的代码

    在实际应用中,你可能还需要处理错误,确保消息序列化和反序列化,以及实现用户身份验证和会话管理。此外,你可能需要考虑在生产环境中部署WebSocket服务,这通常涉及到使用像Daphne这样的ASGI服务器和Nginx等反向...

    django-two-factor-auth:完整的Django双重身份验证,可轻松集成到大多数Django项目中

    `django-two-factor-auth` 是一个针对Django框架的强大的二次身份验证插件,旨在为用户账户提供额外的安全层。它通过引入基于电话、短信或应用令牌(如Google Authenticator)的验证机制,增强了传统的用户名和密码...

    Learning Website Development with Django

    - **易用性**:Django提供了许多内置的功能,如认证系统、管理界面等,使得开发者能够快速搭建起一个功能完备的网站。 - **安全性**:Django在设计时充分考虑了安全性问题,比如防止SQL注入攻击、XSS攻击等,这使得...

    DjangoVue系统架构设计与实现.pptx

    * Django的ORM提供了一种声明式的方式来操作数据库,同时它也包含了很多其他的功能,例如认证系统、权限管理、URL路由等。 * 在Django中,MVC模式被用于分离应用程序的不同部分。Model负责处理数据和数据库操作,...

    Django-webchat-app:使用 Django 的在线聊天应用程序

    - **用户认证**:Django 自带的认证系统可以处理用户的注册、登录和权限管理。在聊天应用中,用户需要先登录才能使用聊天功能。 - **数据库**:Django 集成了多种数据库,如 SQLite、MySQL 或 PostgreSQL。项目中...

    PyPI 官网下载 | django-angular-0.1.4.tar.gz

    6. **Web开发流程**:在Django和Angular的集成项目中,Django通常处理HTTP请求、数据操作、认证和授权等后端任务,而Angular负责处理视图渲染、用户交互和路由等前端任务。 7. **最佳实践**:在实际项目中,使用...

    Web应用程序结构:原理、协议及实现

    Web应用程序结构是构建在互联网基础上的应用程序,它们通过HTTP(超文本传输协议)与其他网络服务进行交互,为用户提供丰富的互动体验...理解这些原理、协议和实现方法,才能构建出高效、安全、用户体验良好的Web应用。

    Django-chat-room

    要确保聊天室的安全,Django的内置认证系统将派上用场。用户需要登录才能参与聊天,这就需要实现注册、登录和权限控制功能。 8. **错误处理与日志记录** 良好的错误处理和日志记录是任何应用程序的关键部分。...

    网络编程实现图书馆登录

    此外,考虑到安全性,登录系统还可能包含验证码、双因素认证等额外的安全措施,以防止自动化攻击或未经授权的访问。验证码可以通过图像或短信形式发送,用户需要正确输入才能登录。双因素认证则需要用户提供两种证明...

    booktime:继F. Marani的出色著作“ Practical Django 2 and Channels 2”(实用的Django 2和Channels 2)之后

    6. 用户认证和授权:实现用户注册、登录、权限控制等功能,以及如何利用Django的内置认证系统。 7. Channels 2基础:理解ASGI和WebSockets的工作原理,配置Channels,创建消费者来处理WebSocket连接。 8. 实时应用...

    学生考勤签到系统

    本文将深入探讨此类系统的功能、设计原理以及实现技术。 一、系统功能介绍 1. 签到签退:系统的核心功能是签到与签退。通过集成GPS定位或Wi-Fi信号检测,确保学生在指定地点进行签到,防止代签现象。同时,设定...

    大学生校园兼职系统.zip

    4. 认证机制:采用OAuth2.0或JWT(JSON Web Tokens)实现用户身份验证,保护用户隐私。 5. 安全防护:通过HTTPS协议保障数据传输安全,使用防火墙和DDoS防护措施防止恶意攻击。 四、系统功能详解 1. 用户认证:学生...

    学生信息管理系统

    登录模块则确保只有授权用户能访问系统,通常采用密码验证机制,有的系统还会添加验证码或双因素认证以增强安全性。 2. **个人信息管理**:用户可以查看和修改自己的个人信息,包括但不限于姓名、性别、出生日期、...

    chatapi:这是Django驱动的api

    Django提供了强大的认证和授权系统,ChatAPI可能利用这些功能来实现安全的用户登录和权限控制。 6. **API端点和请求处理**: ChatAPI可能有多个API端点,如注册新用户、登录、创建聊天室、发送/接收消息等。每个...

    在线客服系统源码

    学习和分析这个源码,你可以了解如何实现用户身份验证、消息实时传输、客服状态同步以及如何优化用户体验。对于开发者来说,这是一份宝贵的实践资料,有助于提升在实时通讯系统和Web应用开发方面的技能。同时,对于...

Global site tag (gtag.js) - Google Analytics