DRF-认证源码分析,自定义认证组件
1.认证的写法:
认证的实现:
1.写一个类,继承BaseAuthentication,重写authenticate,认证的逻辑写在里面,认证通过,返回两个值,一个值最终给了Request对象的user,认证失败,抛异常:APIException或者AuthenticationFailed
2.分全局使用和局部使用
2.认证源码分析
1.APIView-----》dispatch方法-----》self.initial(request,*args,**kwargs)-----》有认证、权限、频率
3.只读认证源码:self.initial(request,*args,**kwargs)----->self.perform_authentication(request)
4.如第3步perform_authentication(self,request)只有一句话:request.user, 需要去DRF的Request对象中找user属性(方法)
执行流程:
Request类中的user方法,刚开始来,没有_user(即没有用户),则走self._authenticate()
5.核心,就是Request类的 _authenticate(self):
6.登录认证代码逻辑及执行流程
a.在views.py中先写登录功能
b.创建app_auth.py文件,写入登录功能的认证类
c.最后将views.py的每个功能类下加上登录认证类:authentication_classes = [MyAuthentication]
7.登录接口_views:
8.登录接口_model中User表和UserToken表创建:
9.登录接口_url路由配置:
10.登录接口_app_auth认证类:
11.每个功能接口都要加登录认证类即可实现只有用户登录了才可以使用该功能
12.登录接口测试_生成token:
13.登录接口测试_功能代码中添加认证类后_再次调用该功能时,会提示需要带入登录token:
14.登录接口测试_添加token接口正常返回数据: