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

时间:2017-12-06 15:32:53

标签: django permissions django-rest-framework

我正在使用django rest框架使用Token Authentication方法编写api,如下所示

@api_view(['GET'])
@permission_classes((IsAuthenticated, ))
def ah(request, format=None):
    result = request.user.is_authenticated()

    content = {"hello":result}
    return Response(content)

我的设置是

    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',

]

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

  

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

     

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

但是当我设置

时,主要问题就在这里
  

@permission_classes((IsAuthenticated,))

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

任何帮助请!!

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

使用此:

permission_classes = [permissions.IsAuthenticated,]

对我有用。