三大认证工作原理简介
源码分析:
from rest_framework.views import APIView
源码分析入口:
内部的三大认证方法封装:
三大组件的原理分析:
权限六表分析
基于用户权限访问控制的认证(RBAC):Role-Based-Access-Control;基于auth的认证规则(了解)。
Django框架采用的是RBAC认证规则:通常分为:三表规则、五表规则、Django采用的是六表规则。
三表:用户表、角色表、权限表
五表:用户表、角色表、权限表、用户角色关系表、角色权限关系表、用户权限关系表
六表:用户表、角色表、权限表、用户角色关系表、角色权限关系表、用户权限关系表
源码分析三者的关系
用户表:角色groups,权限user_permissions
角色表:用户user_set,权限permissions
权限表:用户user_set,角色group_set
重点:如果自定义User表后,再另一个项目中采用原生User表,完成数据库迁移时,可能失败。
解决的办法:
(1)、卸载Django,重新安装(源码问题)
(2)、将django.contrib下面的admin、auth下的数据迁移记录文件全部清空
from django.contrib.auth.models import AbstractUser,User
创建自定义User表
models.py
from django.contrib.auth.models import AbstractUser class User(AbstractUser): mobile = models.CharField(max_length=11, unique=True)#设置成唯一的 class Meta: db_table = ‘api_user‘ verbose_name = ‘用户表‘ verbose_name_plural = verbose_name def __str__(self): return self.username
数据库迁移:
>> python3 manage.py makemigrations >> python3 manage.py migrate >> #创建超级用户 >>> python3 manage.py createsuperuser >> admin admin123
配置自定义user表
在settings.py下面输入,告诉django系统自己创建自定义的用户表。
AUTH_USER_MODEL = "api/User"
创建好的三表结构
脚本启动测试查询数据
# django脚本话启动 import os, django os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dg_proj.settings") django.setup() from api import models user = models.User.objects.first() # type: models.User print(user.username) print(user.groups.first().name) print(user.user_permissions.first().name)
from django.contrib.auth.models import Groupgroup = Group.objects.first()# print(group.name)# print(group.user_set.first().username)# print(group.permissions.first().name)
认证组件的源码分析
点击进去,逐一分析,第一个分析的是,认证组件,
def perform_authentication(self, request):
需要点击定位到request下面的user方法继续往下查看其原理
内部user的方法
点击 self._authenticate查看认证源码的精髓实现认证的部分
原文地址:https://www.cnblogs.com/Gaimo/p/11715775.html
时间: 2024-10-25 13:20:26