有条件地向 DRF 视图验证用户

Conditionally authenticate users to DRF view

我有这样的 DRF 视图:

class DocumentsView(generics.ListCreateAPIView):
    permission_classes = ()
    authentication_classes = ()
    # I typically enforce authentication with 
    # authentication_classes = (JWTCookieAuthentication,)

    def list(self, request):
        pagination_class = None
        
        if request.user.is_authenticated: 
           ... return protected data ...
        else:
           ... return generic data ...

我想允许发送有效令牌的用户和未发送有效令牌的用户都从该端点获得响应。但是,request.user.is_authenticated returns False,即使发送了有效令牌(我明白为什么)。我怎样才能尝试对用户进行身份验证,但即使不提供令牌也仍然允许他们继续?

或者更好的做法是不对未经身份验证的用户使用相同的视图?

你想要的是没有权限,但仍然执行身份验证

身份验证验证令牌,从数据库中获取用户等。如果禁用它,则不会执行 tokens/etc 的检查。这意味着 request.user 将始终等于 AnonymousUser.

class MyView(ListCreateApiView):
    permissions_classes = [AllowAny]
    

值得考虑使用 AllowAny 作为您的许可。它与使用空白列表 [] 相同,但表明您的意图是制作视图 public,而不是错误。