欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

drf框架中认证与权限工作原理及设置

程序员文章站 2023-11-22 12:51:46
0909自我总结 drf框架中认证与权限工作原理及设置 一.概述 1.认证 返回None = 游客 返回user,auth = 登录用户 抛出异常 = 非法用户 1)如果前台没有携带认证信息,直接定义为游客 2)如果前台携带了认证信息并认证通过,定位为登录用户,将登录的用户user对象保存在 req ......

0909自我总结

drf框架中认证与权限工作原理及设置

一.概述

1.认证

工作原理

  • 返回none => 游客
  • 返回user,auth => 登录用户
  • 抛出异常 => 非法用户

前台对于用户信息进行的判断

1)如果前台没有携带认证信息,直接定义为游客

2)如果前台携带了认证信息并认证通过,定位为登录用户,将登录的用户user对象保存在 requset.user 中

3)如果前台携带了认证信息但没有认证通过,一般都定义为游客

4 ) 可以自定义为非法用户,抛出 认证失败 异常,但是不建议直接操作,可以交给权限组件进一步处理rest_framework.exceptions 的 authenticationfailed

参数

  • basicauthentication : 基本认证

  • sessionauthentication : session认证

2.权限

工作原理

  • 返回false => 没有权限,将信息返回给前台
  • 返回true => 拥有权限,进行下一步认证(频率认证)

相关设置

  • allowany:允许所有用户
  • isauthenticated:只允许登录用户
    • 必须request.user和request.user.is_authenticated都通过
  • isauthenticatedorreadonly:游客只读,登录用户无限制
    • get、option、head 请求无限制
    • 前台请求必须校验 request.user和request.user.is_authenticated
  • isadminuser:是否是后台用户
    • 校验 request.user和request.user.is_staff is_staff(可以登录后台管理系统的用户)

二.局部设置

即在我们自定义的视图类开头设置

# 认证 下面不一定是[],也可以()就是需要在数组当中,多个类用,隔开
# 局部取消认证组件:authentication_classes = []
# 区别启用认证组件:authentication_classes = [认证类们] 
# 填写的参数basicauthentication,sessionauthentication 


# 权限
# 局部取消权限组件:permission_classes = []
# 区别启用权限组件:permission_classes = [权限类们]
# 填写的参数allowany

from rest_framework.authentication import sessionauthentication, basicauthentication
from rest_framework.views import apiview
from rest_framework.permissions import isauthenticated
 
class 类名(apiview):
    authentication_classes = (sessionauthentication, basicauthentication)
    permission_classes = [isauthenticated,]
    ...........

三.全局设置

setting中设置

rest_framework = {
    'default_authentication_classes': [
        # django默认session校验:校验规则 游客 及 登录用户
        'rest_framework.authentication.sessionauthentication',
        'rest_framework.authentication.basicauthentication',
    ],
    'default_permission_classes': [
        # 'rest_framework.permissions.allowany',
        # 全局配置:一站式网站(所有操作都需要登录后才能访问)
        # 'rest_framework.permissions.isauthenticated',
    ],
}

四.失败返回的内容

  • 401 unauthorized 未认证
  • 403 permission denied 权限被禁止