美文网首页
rest_framework 用户认证

rest_framework 用户认证

作者: eeert2 | 来源:发表于2020-03-04 10:50 被阅读0次

    分为两步实现

    • 第一步,创建自己的认证类Authentication,
      需要实现两个方法:
    from rest_framework import exceptions
    from rest_framework import authentication
    
    class MyAuthentication(authentication.BaseAuthentication):
        """创建自己的`认证类`"""
    
        def authenticate(self,request):
            """返回结果只能有`三种`
                1.认证失败,抛异常 -> raise exceptions.AuthenticationFailed
                2.认证成功,返回元组(`用户信息`,`token令牌信息`),
                    rest framework 会将这两个信息赋值给`request`对象,以便下一步使用。
                    用户信息只能有一个,一旦认证成功,则不再对下一个`认证对象`进行认证
                3.既不抛异常,也没有返回值(或者返回`None`),则继续下一个`认证`
    
                 如果最终都没有返回元组(`用户信息`,`token令牌信息`),则使用配置的默认用户信息:`匿名用户`
            """
            pass
    
        def authenticate_header(self,requet):
            pass
    
    • 第二步,将认证类进行配置,这里又分两种方式
      • 1)在MyView视图类中,将认证类Authentication,添加进authentication_classes列表中,表示该认证类只对当前视图类起作用。
    class MyView(APIView):
        authentication_classes = ['MyAuthentication',......]
        
        def get(request, *args, **kwargs):
            pass
    
    • 2)在Djangosettings.py 进行全局配置
    # settings.py
    
    REST_FRAMEWORK = {
        'DEFAULT_AUTHENTICATION_CLASSES': ['api.utils.auth.Authtication',]
    }
    

    这里的局部配置优先于全局配置,例如:

    class MyView(APIView):
        authentication_classes = [ ] # 覆盖 APIView 的 authentication_classes 属性
    

    则当前视图类可绕过全局认证


    5.用户认证的源码流程

    1.MyView.as_view() 这里调用Djangoas_view()生成view,并对view进行csrf豁免。

    2.dispatch(),rest framework重写了dispatch()
    1)执行initialize_request(request, *args, **kwargs)request进行包装,并执行
    get_authenticators(),获取认证对象
    2)执行 initial(request, *args, **kwargs),在initial中进行认证perform_authentication(request)

    6. REST用户认证配置匿名用户以及token

    # settings.py
    
    REST_FRAMEWORK = {
        # 这里 UNAUTHENTICATED_USER、UNAUTHENTICATED_TOKEN 应是函数对象
        # 默认的匿名用户,token为 UNAUTHENTICATED_USER(),UNAUTHENTICATED_TOKEN()
        # None() 返回值仍然为None
        'UNAUTHENTICATED_USER': None,
        'UNAUTHENTICATED_TOKEN': None,
    }
    

    相关文章

      网友评论

          本文标题:rest_framework 用户认证

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