首页 > 其他分享 >认证

认证

时间:2022-12-08 21:58:08浏览次数:40  
标签:authenticate self request 认证 token user

认证

目录

1、认证的写法

#认证的实现
 -1.写一个类,继承BaseAuthentication,重写authenticate,认证的逻辑写在里面,返回两个值,一个值最终给了Request对象的user,,如果认证失败就抛异常:AuthenticationFailed
 -2.全局使用,局部使用

2、认证的源码分析

# 1. APIView-----》dispatch方法-----》self.initial(request, *args, **kwargs)----》有认证,权限,频率
# 2.  只读认证源码 initial-----》 self.perform_authentication(request)

    def perform_authentication(self, request):
     	#去Resquest类中查找,方法属性user的get方法
        request.user
        
# 3. self.perform_authentication(request)就一句话:   request.user ,需要去drf的Request对象中找user属性(方法)
    class Request:
        @property
        def user(self):
            if not hasattr(self, '_user'):
                with wrap_attributeerrors():
                    
                    self._authenticate()
                    
            return self._user

# 4. Request类中的user方法,刚开始,没有_user,所以走self._authenticate()
# 5. 核心 就是 Request类的_authenticate(self)
    def _authenticate(self):
        
        #遍历拿到一个个认证器,进行认证
        # self.authenticators配置的一堆认证类产生的认证类对象组成的list
        #self.authenticators在视图类中配置的一个个认证类: authentication_classes=[认证类1,认证类2],对象的列表
        #每次循环,拿到一个认证类的对象
        for authenticator in self.authenticators:
            try:
                #认证器(对象)调用认证方法authenticate(认证类对象self,request请求对象)
                #返回值:登录的用户与认证的信息组成的tuple
                #该方法被try包裹,代表该方法会抛异常,抛异常就代表认证失败
                user_auth_tuple = authenticator.authenticate(self)
            except exceptions.APIException:
                self._not_authenticated()
                raise

            if user_auth_tuple is not None:
                self._authenticator = authenticator
                #如何有返回值,就将登录用户 与 登录认证 分别保存到 request.user,request.auth
                self.user, self.auth = user_auth_tuple
                return
        #如果返回值user_auth_tuple为空,代表认证通过,但是没有 登录用户 与 登录认证信息,代表游客
        self._not_authenticated()

3、认证组件的使用

# 写一个认证类

from rest_framework.authentication import BaseAuthentication
from rest_framework.exceptions import AuthenticationFailed
from app01.models import UserToken


class MyAuthentication(BaseAuthentication):
    def authenticate(self, request):
        # 认证逻辑,如果认证通过,返回两个值
        # 如果认证失败,抛出AuthenticationFailed
        token = request.GET.get('token')
        if token:
            user_token = UserToken.objects.filter(token=token).first()
            # 认证通过
            if user_token:
                return user_token.user.token
            else:
                raise AuthenticationFailed('认证失败')
        else:
            raise AuthenticationFailed('请求地址中需要携带token')

#可以有多个认证,从左到右依次执行
#全局使用,在settings.py中配置
REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': [
            "app01.app_auth.MyAuthentication"
    ]
}
#局部使用,在视图类上写
authentication_classes = [MyAuthentication]
#局部禁用
authentication_classes = []

标签:authenticate,self,request,认证,token,user
From: https://www.cnblogs.com/zaosong/p/16967450.html

相关文章

  • 无线类产品出美国站亚马逊做FCC认证
    FCC-ID是美国强制性FCC认证模式的其中一种,适用于无线产品。具备无线发射频率的产品如:蓝牙设备,WiFi设备,无线**设备,无线电接收和传输设备、电话,电脑等,都需要申请FCC-ID认证。......
  • 你的ES还在裸奔吗?还不赶紧开启X-Pack权限认证
    前言在es的早期版本中,没有免费提供安全认证的相关功能。为了防止数据安全问题,一般的措施都是采用IP黑白名单,网络防火墙,Nginx代理权限控制。而从es6.8和7.1版本开始,es给我......
  • Spring Security认证
    SpringSecurity认证SpringSecurity是一个功能强大且高度可定制的身份验证和访问控制框架。它是用于保护基于Spring的应用程序的实际标准。SpringSecurity是一个框架,致......
  • 2022年RHCE最新认证
    RHCE认证重要配置信息在考试期间,除了您就坐位置的台式机之外,还将使用多个虚拟系统。您不具有台式机系统的root访问权,但具有对虚拟系统的完整root访问权。系统信息......
  • 中国台湾BSMI认证变动
    China Taiwan中国台湾2022年 11月 1日,BSMI和经济部发布了针对 18种音像产品的修订法定检验要求。 自发布之日起,CNS15598-1:2020Audio/video,informationand......
  • Eolink 通过公安部「等保三级」认证,保障企业与开发者 API 数
    据《2021年中国互联网安全报告》显示,“2021年网络安全形势严峻,应用层攻击持续高发,API攻击尤其呈爆炸性增长,达到2020年的3.13倍;API安全威胁已经进入爆发期,2021年针对API业务......
  • 直播系统app源码,自定义九宫格,计算器布局,验证码认证
    直播系统app源码,自定义九宫格,计算器布局,验证码认证1、先写几个接收验证码的文本框 returnScaffold(   backgroundColor:ColorsUtil.hexStringColor("#B1B1B1")......
  • HCIA学习笔记四十八:CHAP认证配置
    一、PAP认证和CHAP认证• PAP(PasswordAuthenticationProtocol密码认证协议)• PAP是简单认证,明文传送,客户端直接发送包含用户名/口令的认证请求,服务器端处理并回应......
  • Firebase token认证 “kid“ invalid, unable to lookup correct key
    解码时,useFirebase\JWT\JWT;useFirebase\JWT\Key;JWT::decode($jwt,$key,['HS256']);改为JWT::decode($jwt,newKey($key,'HS256'));https://blog.csdn.net/we......
  • 消息认证
    消息认证主动攻击和被动攻击安全攻击主要分为两类:主动攻击和被动攻击被动攻击以获取信息为目的,不对数据做任何的篡改,破坏消息的机密性。主动攻击通过冒充、重放、篡改......