三大认证

复习

"""
1、三大认证:
	认证组件:request.user登录用户
	权限组件:user是否有权限
	频率组件:3/min一分钟可以访问三次

2、auth认证六表:User、Group、Permission、三个关系表

3、自定义User表
	1)自定义User继承AbstractUser
	2)在settings中配置AUTH_USER_MODEL
	3)admin注册自定义User表,配置UserAdmin
	
4、认证规则:session认证、jwt认证
	jwt:json web token;只有客户端存储token;服务器只负责token签发与校验
	jwt:header.payload.sign(头-基本信息.载荷-核心信息.签名-安全信息)
	
5、drf-jwt:
	签发token、校验token、刷新token的三个视图类
	认证组件(校验jwt token,得到登录用户user,存储到request.user中)
"""

知识点总结

"""
1、认证组件
* settings文件全局配置drf-jwt框架的认证类
REST_FRAMEWORK = {
    # 认证组件
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication'
    ],
}
了解:如何自定义认证类、以及认证类规则

2、权限组件
* 视图类局部配置 drf自带 或 自定义 权限类
class MyAPIView(APIView):
	permission_classes = [permissions.VIPUserPermission]
	
* drf自带:IsAuthenticated, IsAdminUser, AllowAny, IsAuthenticatedOrReadOnly
* 自定义:
class VIPUserPermission(BasePermission):  # 只要vip分组用户有权限
    def has_permission(self, request, view):
        for group in request.user.groups.all():
            if group.name.lower() == 'vip':
                return True  # 有权限
        return False  # 无权限

3、频率组件
* 视图类局部配置 drf自带 或 自定义 频率类
class MyAPIView(APIView):
	throttle_classes = [throttles.MobileRateThrottle]

* drf自带:AnonRateThrottle, UserRateThrottle
* 自定义:
class MobileRateThrottle(SimpleRateThrottle):
    scope = 'mobile'
    def get_cache_key(self, request, view):
        if not request.user.is_authenticated or not request.user.mobile:
            return None  # 匿名用户 或 没有电话号的用户 都不限制
        return self.cache_format % {  # 只要有电话号的用户踩进行限制
            'scope': self.scope,
            'ident': request.user.mobile
        }
 配合settings中的频率配置
 REST_FRAMEWORK = {
    # 频率组件:频率类一般做局部配置,但是频率调节在settings中配置
    'DEFAULT_THROTTLE_RATES': {
        'user': '5/min',
        'anon': '3/min',
        'mobile': '1/min'
    },
}


4、自定义签发token - 多方式登录
1)将请求数据交给序列化类,执行序列化校验
2)在序列化全局校验钩子中,完成user的认证与token的签发,保存在序列化对象的content中
3)在视图类中从序列化对象的content中拿user与token相关信息返回
注:多方式登录体现在 请求的账号类型可能是用户名、邮箱或手机等,采用不同字段校验数据库即可
"""

posted @ 2020-01-05 15:59  lucky_陈  阅读(322)  评论(0编辑  收藏  举报