美文网首页
DRF之自定义认证类

DRF之自定义认证类

作者: 清风徐来_简 | 来源:发表于2019-05-26 12:57 被阅读0次
  • LoginView中:用户登录就对应用户生成token存入对应关系表
    user = User.objects.filter(user=user,pwd=pwd).first()  # 看看有没有此用户
    import uuid  # 此模块用来生成随机字符串
    random_str= uuid.uuid4()
        if user:     # 是更新还是创建取决于user有没有,如果有就更新,没有就创建
             UserToken.objects.update_or_create(user=user,defaults={'token':random_str})
             response['user'] = user.user  # 将用户名返回,可能有用
             response['token'] = random_str
    return Response(response)
    
  • 自定义认证类:根据用户token表查看是否通过认证
    from rest_framework.exceptions import AuthenticationFailed
    from app01.models import UserToken
    
    class UserAuth():  # 【认证第一步】
        def authenticate_header(self, request):  # 这个方法必须有
            pass
    
        def authenticate(self, request):
            token = request.query_params.get('token')
            usertoken = UserToken.objects.filter(token=token).first()  # token对象
            if usertoken:  # 如果用户登录了
                return usertoken.user, usertoken.token  # 此句话赋值给self.user,也就是request.user
                # 通过token值,找到user对象,并赋值给request。
                # 因为这只是访问的第一步,第二部还要根据用户的身份进行不同的展示。
                # 而第二步是走到第一步的毕竟之路,所以想让第二步有user对象,可以通过第一步完成之后把user对象赋值给request
                # 当然还可以自己通过token值查找用户,相对来说会比较麻烦。
            else:  # 用户没登录就得抛错
                raise AuthenticationFailed('认证失败!')
    #  这就限制了用户只有登录之后才能访问
    
  • 用的时候:
    from app01.authentication_classes import UserAuth
    class BookView(APIView):
        authentication_classes = [UserAuth]  # 【认证第二步】
        def post(self, request):
            pass
        def get(self, request):
            pass
    
  • 登录认证流程:
    • 用户输入 账号(唯一) 和 密码 之后,走login函数,函数去数据库查询,如果有查询结果,证明存在,就随机生成一个 uuid4() 的字符串,存进与之一一对应的 usersession 表中。并且将这个字符串返回给前端。
    • 前端再次访问时带着字符串访问。后端进行验证。
    • 验证的时候通过 usersession 验证,如果有就通过,正常访问,如果没有就拒绝访问。
  • 自定义认证类流程
    • 定义的时候就是自定义一个类class UserAuth(BaseAuthentication)
    • 这个类继承BaseAuthentication
    • 定义一个 authenticate方法,
    • 进行认证,如果认证通过就可以返回两个值
    • 认证不通过,就抛一个 AuthenticationFailed 错误,
    • 使用时就在视图函数中指定 authentication_classes= [UserAuth]

相关文章

  • DRF之自定义认证类

    LoginView中:用户登录就对应用户生成token存入对应关系表user = User.objects.fil...

  • 自定义身份认证

    自定义身份认证 在api的drf_views中加入: UsersviewSet:用户详细信息类中增加字段 api的...

  • DRF10大组件的作用和使用方法

    认证: 作用,检测用户是否登录 自定义认证类(继承自object) 自定义认证类(继承自BaseAuthentic...

  • DRF之版本控制

    版本控制 自定义版本控制类 使用(局部) 全局设置 使用 DRF内置的版本控制类QueryParameterVer...

  • SpringBoot+Security+JWT进阶:一、自定义认

    这里谈谈自定义认证 不使用自定义认证的 WebSecurityConfig 不使用自定义认证的验证类 Abstra...

  • 认证,权限,节流,版本,解析器 基本使用

    认证的基本使用局部配置自定义认证类在视图通过authentication_classes设置认证类authenti...

  • 版本 节流 权限

    认证的基本使用局部配置自定义认证类在视图通过authentication_classes设置认证类authenti...

  • DRF十大组件

    DRF十大组认证实现 ##############################################...

  • DRF之认证组件

    认证组件源码 我们进去我们的认证看下image.png 我们这个权限组件返回的是request.user我们的in...

  • DRF认证

    单独看用法 你定义了一个类CBV,类继承自APIView,在里面赋值authentication_classes字...

网友评论

      本文标题:DRF之自定义认证类

      本文链接:https://www.haomeiwen.com/subject/bnvxtctx.html