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)
 

最新文章

  1. [代码]label增加删除线
  2. 36.Android之多线程和handle更新UI学习
  3. MySQL大批量插入数据
  4. 之前做web性能优化的一些个人心得
  5. 如何让sudo命令不需要输入密码就可执行
  6. .NET 4.0 兼容 .NET 2.0 的方法
  7. 自学XML DOM的几个例子
  8. 如何删除openfire for苹果,彻底卸载!
  9. iOS 真机调试(最具体的步骤来解决历史,hmt精心打造)
  10. webkit 子资源加载过程
  11. C#通过系统API判断已经连接互联网
  12. Eclipse中tomcat配置
  13. ASP.NET Core在Azure Kubernetes Service中的部署和管理
  14. java学习(五)
  15. JavaScript 从入门到放弃(二)模块化工具requirejs
  16. 4412 uboot启动分析
  17. Spring 添加属性集中常见方法
  18. java 之UDP编程
  19. WebSocket.之.基础入门-建立连接
  20. sql优化学习(一)

热门文章

  1. JavaScript 异步编程(一):认识异步编程
  2. Java中字节流的总结及代码练习
  3. 在Linux下配置RealVNC和TigerVNC
  4. day33-线程基础03
  5. K8S之YAML配置文件
  6. c#中容易被忽视的foreach
  7. bat查找文件
  8. 用compose安装tp框架提示警告putenv
  9. 【gRPC】C++下使用CMakeLists快速构建项目
  10. std:move() 作用 和 移动语义后 右值行为,unique_ptr的"移动"操作问题