【发布时间】:2017-01-07 16:59:19
【问题描述】:
我正在使用带有 ModelViewSet 的 django rest 框架可浏览 api 来执行 CRUD 操作并希望使用权限。IsAuthenticatedOrReadOnly,但是当我登录并尝试 DELETE 或 PUT 时,我得到了
"detail": "CSRF Failed: CSRF token missing or incorrect."
我的视图是这样的
class objViewSet(viewsets.ModelViewSet):
queryset = obj.objects.all()
serializer_class = objSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
Settings.py
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.AllowAny',
),
序列化器只是
class ObjSerializer(serializers.ModelSerializer):
class Meta:
model = Obj
虽然当我删除 permission_classes(所以默认的 allowAny 触发器)时,它可以正常工作。
我想要什么
只有在我通过身份验证后才能进行 PUT/DELETE。当一切自动发生时,我不知道如何发送 CSRF 令牌(modalviewset 完成整个工作)
【问题讨论】:
-
您想全局删除 csrf 检查吗?还是单独的非 csrf 视图?
-
如果您在这里找不到更好的解决方案,我敢打赌您正在使用“rest_framework.authentication.SessionAuthentication”作为身份验证类之一。从设置中删除它,一切都应该正常工作。