41.SessionAuthenticatio和自定义认证

SessionAuthentication认证介绍
  • SessionAuthentication使用了Django默认的会话后端
  • 适合AJAX客户端等运行在同样会话上下文环境中的模式
  • 是DRF默认的认证方式之一
 
SessionAuthentication认证属性
#认证成功 SessionAuthentication 提供下面的属性
request.user :设置为一个Django的 User 类的实例
request.auth :设置为None
# 认证不成功将返回 HTTP 403 Forbidden 响应,没有额外的头部信息
''' 
如果使用类似AJAX风格的API,并采用SessionAuthentication认证
当使用不安全的HTTP方法,比如 PUT , PATCH , POST 或者 DELETE,必须提供合法的CSRF令牌
DRF框架中的CSRF验证与标准Django的CSRF验证的工作方式略有不同
因为需要同时支持同一视图的会话和非会话身份验证
只有经过身份验证的请求才需要CSRF令牌,匿名请求可以在没有CSRF令牌的情况下发送
不适用于登录视图,登录视图应始终应用CSRF验证
'''
RemoteUserAuthentication认证
'''
使用Django的auth框架的认证功能
必须在AUTHENTICATION_BACKENDS 配置中使用django.contrib.auth.backends.RemoteUserBackend (或者继承它)
如果认证成功, RemoteUserAuthentication 提供下面的属性:
    request.user :设置为一个Django的 User 类的实例
    request.auth :设置为None
此认证一般使用不多
'''
 
自定义认证
# 导入用户模型
from django.contrib.auth.models import User
# 导入认证模块
from rest_framework import authentication
# 异常模块
from rest_framework import exceptions


# 继承BaseAuthentication,实现BaseAuthentication两个待实现的方法
class UserAuthentication(authentication.BaseAuthentication):

    # 认证模块,返回None 或者user
    def authenticate(self, request):
        '''
        从头部获取用户信息
        头部自定义字段为MyUsername
        Django会自动拼上HTTP_全大写英文
        '''
        username = request.MEATA.get('HTTP_MYUSERNAME')
        # 没有用户信息返回None
        if not username:
            return None

        try:
            # 去User查找对应用户信息
            user = User.objects.get(username=username)

        except User.DoesNotExist:
            # 如果找不到对应用户 抛出异常
            raise exceptions.AuthenticationFailed('没有对应用户')

        # 找对对应用户 返回
        return (user, None)  # (request.user,request.auth)
 

作者:木子七

出处:https://www.cnblogs.com/Mickey-7/p/16773297.html

posted @   木子七  阅读(54)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示
workspaces
keyboard_arrow_up dark_mode palette
选择主题