为什么Django REST Framework提供不同的身份验证机制

Bil*_*one 15 authentication django restful-authentication django-rest-framework

为什么Django REST Framework实现了与内置Django机制不同的身份验证机制?

也就是说,可以配置两个设置类:

  1. settings.AUTHENTICATION_BACKENDS 它处理Django级别的身份验证,以及
  2. settings.REST_FRAMEWORK['DEFAULT_AUTHENTICATION_CLASSES'] 在REST-Framework级别进行身份验证

我遇到的问题是我有一个中间件层来检查用户是否登录.

使用通过会话进行身份验证的Web客户端时,这很好用.但是,从移动设备或运行测试套件(即使用HTTP标头和令牌进行身份验证)时,中间件会将用户检测为AnonymousUser,但是当我们到达REST Framework层时,Authorization会读取HTTP 标头,并且用户是登录.

为什么这些都不会在中间件之前发生?此外,为什么REST Framework的身份验证方法不依赖于Django身份验证后端?

Tho*_*mas 9

Django Rest Framework默认情况下不会在中间件中执行身份验证,原因与Django默认情况下不在中间件中执行身份验证的原因相同:中间件适用于所有视图,如果您只想验证对一小部分视图的访问权限,那就太过分了.此外,能够为不同的API端点提供不同的身份验证方法是一个非常方便的功能.

Rest Framework的身份验证方法不依赖于Django身份验证后端,因为Django的后端针对常见情况进行了优化,并且与用户模型紧密相关.Rest Framework旨在让以下内容变得简单:

  1. 使用许多不同的验证方法.(您想要基于HMAC的身份验证吗?已完成!这是django auth框架无法实现的)
  2. 提供API数据,而无需任何数据库.(你有一个redis数据库,你的所有数据都在内存中?以毫秒为单位提供服务,而无需等待数据库用户模型的往返.)