Django Rest Framework IsAuthenticated 权限错误匿名用户

Ahm*_*dar 5 django permissions django-rest-framework

我正在使用 django rest 框架编写 api,使用如下所示的令牌身份验证方法

@api_view(['GET'])
@permission_classes((IsAuthenticated, ))
def ah(request, format=None):
    result = request.user.is_authenticated()
 
    content = {"hello":result}
    return Response(content)
Run Code Online (Sandbox Code Playgroud)

我的设置是

    REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAdminUser',
        'rest_framework.permissions.IsAuthenticated',
    ],
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',
        #'rest_framework.authentication.BasicAuthentication',
        #'rest_framework.authentication.SessionAuthentication'
    
    )
}

    MIDDLEWARE_CLASSES = [

    'django.contrib.sessions.middleware.SessionMiddleware',
    #'middleware.FirstTokenAuth.AuthenticationMiddlewareJWT',
    #'middleware.TokenAuthTest.JWTAuthenticationMiddleware',   
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.middleware.security.SecurityMiddleware',
    #'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    #'django.middleware.csrf.CsrfViewMiddleware',
   
    #'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    
]
Run Code Online (Sandbox Code Playgroud)

当我使用 IsAdminUserpermission 类调用此 API 时,django Restframework 返回:

403 响应“详细信息”:“未提供身份验证凭据。” 如果标头中未提供令牌

401回复“detail”:“您无权执行此操作。” 如果令牌不是管理员用户的

但主要问题是当我设置时

@permission_classes((已验证,))

即使我没有向标头添加令牌并且返回的用户是匿名用户,API 也会正常调用,不会返回 403 或 401。如何防止匿名用户调用API并为其返回403响应?

请任何帮助!

小智 0

用于@permission_classes识别 api 是否需要身份验证。如果想使用token的话,尝试在里面添加@authentication_classeswith TokenAuthentication。这将检查标头中的令牌并在请求内创建用户对象。