缓存Django OAuth访问令牌

时间:2015-07-18 14:45:32

标签: python django caching oauth django-rest-framework

我在Django Rest Framework中使用Django OAuth Toolkit

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

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

        _dict = {}  
        return self.successful_get_response({"results": _dict})

每次调用此时间视图时,我都会看到一个db调用来验证令牌。有没有办法只缓存此db调用?

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

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

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

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

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