【发布时间】:2015-06-02 12:53:21
【问题描述】:
我为应用创建了一个JWT-Authorised 后端。登录、注销、令牌检索和刷新都可以正常工作,并且符合预期。我今天早上添加了一个注册视图,它会抛出通常的"detail": "Authentication credentials were not provided. 错误,你会期望未经身份验证的请求,因为这是默认值(见下文)。
但是,由于这是一个注册端点,我不希望它只允许授权请求。 (使用有效令牌进行检查后,当您提供身份验证时,视图的其余部分按预期工作。)查看DRF docs 的权限部分,我认为使用 AllowAny 的 permission_classes 包装器可以在这里工作,但它没有吨。
我错过了什么?我觉得 permission_classes 装饰器应该覆盖“IsAuthenticated”的默认设置?
我正在通过 curl 在 localhost 上进行测试:
curl -X POST -H "Content-Type: application/json" -d '{"email":"boba@athingy09876.com", "first_name": "boba", "last_name": "fett" "password":"xyz"}' http://localhost:8000/account/register/
视图是:
@permission_classes(AllowAny)
@api_view(['POST'])
def register_user(request):
from django.contrib.auth.models import User
from rest_framework_jwt.views import obtain_jwt_token
if request.user.is_authenticated():
return Response ({"already_registered": "User with that username has already registered"}, status=status.HTTP_701_ALREADY_REGISTERED)
data = request.data
user, created = User.objects.get_or_create(username=data["email"],
email=data["email"],
first_name=data["first_name"],
last_name=data["last_name"],
password=data["password"])
if created:
token = obtain_jwt_token(data["email"],data["password"] )
return Response ({"token": token}, status=status.HTTP_200_OK)
else:
return Response ({"already_registered": "User with that username has already registered"}, status=status.HTTP_701_ALREADY_REGISTERED)
settings.py 中的权限是:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
),
}
相关问题: Django Rest Framework - Authentication credentials were not provided - 我认为默认权限是正确的,我只是想在这种情况下覆盖它们。
Django Rest Framework - DELETE ajax call failure due to incorrect CSFR token - CSRF 未被用作基于 JWT 的身份验证。
Django: Rest Framework authenticate header - Apache 特定问题(目前仍在 devserver localhost 上)
Django Rest Framework Authentication credentials were not provided - 尚未回答!
【问题讨论】:
-
我的回答对你有用吗?
-
嘿!我还没有机会实现它,但它看起来不错 - 我明天会在赏金到期之前实现它。 :) 抱歉耽搁了!
-
完全不清楚为什么这个问题被否决了,顺便说一句 - 如果这个问题有问题,请告诉我,这不像是一个半生不熟、未经研究的问题。跨度>
标签: python-2.7 authentication django-rest-framework jwt django-1.6