Django Rest Framework IsAuthenticated 权限错误匿名用户
Posted
技术标签:
【中文标题】Django Rest Framework IsAuthenticated 权限错误匿名用户【英文标题】:Django Rest Framework IsAuthenticated permission Error Anonymous user 【发布时间】:2018-05-20 13:12:43 【问题描述】:我正在使用 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 响应。
请帮忙!!
【问题讨论】:
问题在于 Authentication 没有权限,身份验证后端将其设置为 authenticated 。您是否已将 'rest_framework.authtoken' 添加到 INSTALLED_APPS .. 您是否在创建令牌? 嗨 @SajiXavier 是的,我将 restframework.authtoken 添加到已安装的应用程序并创建了令牌并保存在数据库中 【参考方案1】:@permission_classes
用于识别 api 是否需要身份验证。如果要使用令牌,请尝试在里面添加@authentication_classes
和TokenAuthentication
。这将检查标头中的令牌并在请求中创建用户对象。
【讨论】:
【参考方案2】:使用这个:
permission_classes = [permissions.IsAuthenticated,]
它对我有用。
【讨论】:
以上是关于Django Rest Framework IsAuthenticated 权限错误匿名用户的主要内容,如果未能解决你的问题,请参考以下文章
17-Django-Django REST framework-REST framework及RESTful简介
为啥 django-rest-framework 不显示 OneToOneField 数据 - django