REST Framework 的用户认证组件

 用户认证流程:

  我们要知道这个流程是怎么走的? 认证之后做的什么? 怎么认证?这三个条件

  

认证流程:就是使用BaseAuthentication这个模块来做认证,判断你登陆成功传递过来的随机字符串是否存在 
怎么认证: 如果存在就让程序继续下去 然后返回一个两个参数的元组

认证之后 你以后的登陆用户的username或者其他需要获取的数据就从你返回的那个带有两个参数的元组中取出来,因为下民我们需要你返回的信息的时候
      只能是登陆成功后才能使用 所以只有登陆成功后才能继续下面的流程

 

其实用户认证就是做了一个全局的认证 

首先我们要导入两个模块

from rest_framework.authentication import BaseAuthentication  # 这个是限制用户的信息 就是你验证的时候必须要写它里面的方法不然它的方法是返回错误的  所以你 必须要重写 它的方法
from rest_framework.exceptions import AuthenticationFailed  # 这个是你的用户认证出错的时候返回额错误信息 和上面的BaseAuthentication 是一起匹配的
 

BaseAuthentication 内部只是写一个一个方法 这个方法是限制我们必须重写 则会个方法的  如果不重写的话就会抛出一个错误

REST Framework 的用户认证组件

它规定我们只能写这个方法  必须写不写就抛出错误 然后我们再返回的也必须是元组  然后元组的里面含有两个值  并且对应的取值是rquest.user,和reques.auth

from rest_framework.authentication import BaseAuthentication  # 这个是限制用户的信息 就是你验证的时候必须要写它里面的方法不然它的方法是返回错误的  所以你 必须要重写 它的方法
from rest_framework.exceptions import AuthenticationFailed  # 这个事你的用户认证出错的时候返回额错误信息 和上面的BaseAuthentication 是一起匹配的


from app01 import models
class LuffcityAuththentication(BaseAuthentication):  # 然后继承这个模块
    
    def authenticate(self,request):
        '''
        用户认证
        :param self:
        :param request:
        :return:
        '''
        token = request.query_params.get("token")  # 1、你的事个体请求必须从query.params中取值 2、这个事对你的携带的token值给取出来方便下面的判断 因为这个字符串是你的浏览器访问的时候携带的所以就用get请求获取的方式来得到信息
        token_obj = models.UserToken.objects.filter(token = token).first()
        if not token_obj:  # 如果没有这个token或者错误
            raise AuthenticationFailed({"code":88,"data":"登陆失败"})
        # 验证成功
        return (token_obj.user,token_obj)  #返回的是一个元组  必须是一个元组里面两个元素  返回的是对象名和对象本身 方便后面的取值

你认证的时候如果是前后端分离的项目 最好是定的 随机字符串来充当cookie这样有助于取值,如果是用cooike获取session你的逻辑就会很麻烦 所以就尽量使用随机字符串来定义你的验证信息

随机字符串 用uuid