三大認證

複習

"""
一、三大認證:
	認證組件:request.user登陸用戶
	權限組件:user是否有權限
	頻率組件:3/min一分鐘能夠訪問三次

二、auth認證六表:User、Group、Permission、三個關係表

三、自定義User表
	1)自定義User繼承AbstractUser
	2)在settings中配置AUTH_USER_MODEL
	3)admin註冊自定義User表,配置UserAdmin
	
四、認證規則:session認證、jwt認證
	jwt:json web token;只有客戶端存儲token;服務器只負責token簽發與校驗
	jwt:header.payload.sign(頭-基本信息.載荷-核心信息.簽名-安全信息)
	
五、drf-jwt:
	簽發token、校驗token、刷新token的三個視圖類
	認證組件(校驗jwt token,獲得登陸用戶user,存儲到request.user中)
"""

知識點總結

"""
一、認證組件
* settings文件全局配置drf-jwt框架的認證類
REST_FRAMEWORK = {
    # 認證組件
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication'
    ],
}
瞭解:如何自定義認證類、以及認證類規則

二、權限組件
* 視圖類局部配置 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  # 無權限

三、頻率組件
* 視圖類局部配置 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'
    },
}


四、自定義簽發token - 多方式登陸
1)將請求數據交給序列化類,執行序列化校驗
2)在序列化全局校驗鉤子中,完成user的認證與token的簽發,保存在序列化對象的content中
3)在視圖類中從序列化對象的content中拿user與token相關信息返回
注:多方式登陸體如今 請求的帳號類型多是用戶名、郵箱或手機等,採用不一樣字段校驗數據庫便可
"""
相關文章
相關標籤/搜索