如果使用“AllowAny”权限类,如何防止 Django Rest Framework 验证令牌?

Ana*_*ees 4 python django django-rest-framework

让我先向您展示我的代码:

settings.py

....
DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework.authentication.TokenAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
    'rest_framework.permissions.IsAuthenticated',
)
....
Run Code Online (Sandbox Code Playgroud)

我的my_view.py

@api_view(['POST'])
@permission_classes((AllowAny,))
def say_hello(request):
    return Response("hello")
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我默认使用令牌身份验证来保护我的其他 API,但是当我在 中添加令牌标头时say_hello,Django Rest Framework 也会检查令牌是否有效,即使我添加AllowAny权限类也是如此。

我的问题是,如果令牌标头存在于say_hello?中,如何使 Django Rest Framework 忽略检查令牌?这样做有什么安全考虑吗?

谢谢。

wim*_*wim 6

您似乎混淆了身份验证授权

@permission_classes通过在视图上使用装饰器,您已经覆盖了设置中的默认授权。但您仍然可以使用设置中的默认身份验证类别。

尝试在您的视图中添加另一个装饰器,以绕过TokenAuthentication

@authentication_classes([])
Run Code Online (Sandbox Code Playgroud)

请注意,如果您将其放在POST端点上,您的应用程序现在很容易受到跨站点请求伪造等讨厌的东西的影响。