zoukankan      html  css  js  c++  java
  • 三大认证源码分析

    认证组件

    通过dispath方法,进入三大认证:

    首先看一下请求模块,进入request

    进入get_authenticators 方法

    可以知道,请求模块二次封装request对象,包含解析模块,还将认证类们的对象存储在请求对象中。

    进入三大认证

    遍历一个个认证器,完成一个个认证类,每一个配置的认证类都要调用authenticate方法完成认证。返回值是user和auth组成的元组。

    权限组件

    频率组件

    通过dispatch方法 进入频率组件

    然后看SimpleRateThrottle类,有allow_request和 wait 方法。SimpleRateThrottle继承BaseThrottle,BaseThrottle也有allow_request和 wait两个方法,但它没写,需要自己写。

    所以我们继承SimpleRateThrottle类,它帮我们写了allow_request和 wait两个方法

    # 可以直接在自定义频率类中配置rate,这就是要动源码了
    rate = '3/min'
    
    # 但是推荐在自定义频率类中配置scope属性,然后再在settings文件中设置scope
    class MobileReateThrottle(SimpleRateThrottle):
        scope = 'mobile'
        def get_cache_key(self, request, view):
            if not request.user.is_authenticated or not request.user.mobile:
                return None   # 匿名用户   没有电话号的用户都不限制
            
            return self.cache_format % {
                'scope': self.scope,
                'ident': request.user.mobile
            }
        
    
    # settings文件
    REST_FRAMEWORK = {
        # 频率组件,频率类一般做局部配置,但是频率调节在settings中配置
        'DEFAULT_THROTTLE_RATES': {
            'user': '5/min',   # 登录用户限制
            'anon': '3/min',   # 匿名用户限制,
            'mobile': '1/min'
        },
    
    }
    

    来到上面的__init__方法中

    回到allow_request

    cache.set(key, value, exp) 设置过期缓存,exp设为0,代表缓存不过期

    请求一次,将时间保存一次,保存在self.history中

    根据请求时间形成的列表长度判断是否限次

    进入wait方法

  • 相关阅读:
    华为S12700 NQA配置
    斐讯K1 K2 开启Telnet
    存储的一些基本概念(HBA,LUN)
    华为AR配置内部服务器示例(只有1个公网IP)
    使用nginx 做kbmmw REST 服务的负载均衡
    第一个 macOS 64位 kbmmw 服务器
    使用FMXlinux 开发linux 桌面应用
    推荐一套免费跨平台的delphi 哈希及加密算法库
    使用kbmmw 的调度事件动态显示时间
    提高sqlite 的运行性能(转载)
  • 原文地址:https://www.cnblogs.com/setcreed/p/12153408.html
Copyright © 2011-2022 走看看