Django Rest框架身份验证错误
我正在制作一个角色应用程序,使用rest api在django网站中进行身份验证。 在drf文档中,他们声明拒绝的用户认证将导致两个错误,HTTP 401和HTTP 403,如下所示:
当未经身份验证的请求被拒绝时,有两种不同的错误代码可能是合适的。
无论何时,当我尝试使用某些虚拟数据进行身份验证时,这是错误的,我得到错误响应HTTP 400和non_field_errors
。 这里有什么问题?
首先,我使用用户名和密码进行简单身份验证,这样做是为了获取用户令牌,这将用于网站中的其他操作。
我正在使用一种方法来获得一个exh auth令牌,你可以在下面看到它:
class ObtainExperingAuthToken(ObtainAuthToken):def post(self,request,* args,** kargs):serializer = self.serializer_class(data = request.data)
if serializer.is_valid():
print serializer
user = UserProfile.objects.get(email=serializer.data['username'])
token, created = Token.objects.get_or_create(user=user)
utc_now = timezone.now()
if not created and token.created < utc_now - datetime.timedelta(hours=24):
token.delete()
print serializer.data
token = Token.objects.create(user=serializer.data['user'])
token.created = datetime.datetime.utcnow()
token.save()
groups = [group.name for group in user.groups.all()]
response_data = {
'email': user.email,
'token': token.key,
'groups': groups
}
return HttpResponse(json.dumps(response_data), content_type='application/json')
return HttpResponse(serializer.errors, status=400)
@Edit为值REST_FRAMEWORK
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly',
],
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.SessionAuthentication',
'accounts.authentication.ExpiringTokenAuthentication',
],
'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser',
'rest_framework.parsers.FormParser',
'rest_framework.parsers.MultiPartParser',
'rest_framework.parsers.FileUploadParser'
]
}
首先,尽管从你的解释中不太清楚,但我猜你在负责提供用户访问令牌的api中收到400错误。 因为显然这个api上没有认证(除了客户端认证可能),所以你真的会得到错误的请求错误,因为你提供自己提及的无效数据。 当您访问不允许未经身份验证的访问的api时会出现身份验证错误,实际上提供身份验证令牌的api应该不是这种情况。
其次,要获取认证错误,您需要将认证类添加到REST_FRAMEWORK['DEFAULT_AUTHENTICATION_CLASSES']
或视图类的AUTHENTICATION_CLASSES
变量。