有条件地向 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,而不是错误。
我有这样的 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,而不是错误。