Python 缓存Django OAuth访问令牌

Python 缓存Django OAuth访问令牌,python,django,caching,oauth,django-rest-framework,Python,Django,Caching,Oauth,Django Rest Framework,我正在使用Django Rest框架 class DataView(BaseApiMixin, generics.GenericAPIView): permission_classes = (IsAuthenticated,) def get(self, request, *args, **kwargs): _dict = {} return self.successful_get_response({"results": _dict})

我正在使用Django Rest框架

class DataView(BaseApiMixin, generics.GenericAPIView):
    permission_classes = (IsAuthenticated,)

    def get(self, request, *args, **kwargs):

        _dict = {}  
        return self.successful_get_response({"results": _dict})
每次调用此视图时,我都会看到一个db调用来验证令牌。有没有办法只缓存这个数据库调用

我正在使用Redis缓存其他查询,但无法找到缓存身份验证调用的解决方案


非常感谢您的帮助。

每个请求都必须验证身份验证令牌,因此无法缓存用于该令牌的查询。每个请求都会检查令牌是否正确

  • 真实令牌-缓存令牌查询可能会导致您有一段时间不包括新令牌(取决于缓存的查询)。每次生成令牌时,缓存都必须失效
  • 未撤销-如果在缓存查询后撤销令牌,则可能会遇到令牌仍可使用的问题。每次撤销令牌时,缓存都必须失效
  • 未过期-OAuth令牌应该自然过期,您必须不断使缓存失效(取决于查询)

这就是为什么令牌不会缓存在任何地方,而是应该在每个请求上进行一个查询来检查令牌。这相当于在使用Django会话时进行的检查,以验证会话密钥并在每个请求上检索会话数据。

必须在每个请求上验证身份验证令牌,因此无法缓存用于它的查询。每个请求都会检查令牌是否正确

  • 真实令牌-缓存令牌查询可能会导致您有一段时间不包括新令牌(取决于缓存的查询)。每次生成令牌时,缓存都必须失效
  • 未撤销-如果在缓存查询后撤销令牌,则可能会遇到令牌仍可使用的问题。每次撤销令牌时,缓存都必须失效
  • 未过期-OAuth令牌应该自然过期,您必须不断使缓存失效(取决于查询)

这就是为什么令牌不会缓存在任何地方,而是应该在每个请求上进行一个查询来检查令牌。这相当于在使用Django会话时进行的检查,以验证会话密钥并在每个请求中检索会话数据。

是为了避免提供不安全的访问窗口吗?但是这不是很昂贵吗?您必须权衡缓存失效的缺点和进行单个查询的缺点。我想我并没有把它放在我的答案中,但它不可能开箱即用地缓存令牌。这是为了避免提供一个不安全的访问窗口吗?但是这不是很昂贵吗?您必须权衡缓存失效的缺点和进行单个查询的缺点。我想我并没有把它放在我的答案中,但它不可能开箱即用地缓存令牌。