1

得到一个 csrf 错误我不知道如何修复,我有休息 auth 工作,用户可以像这样更新他们的详细信息: 在此处输入图像描述

但是使用Django Comments我得到这个 csrf 错误使用相同的 csrf 令牌错误:

在此处输入图像描述

我想摆脱 /comments/post/ 端点上的这个错误,这样这个端点的行为类似于 /rest-auth/user/ 视图,它接受“授权:令牌 792b5fb27b4fe805e895c91274f26b6ab13cb654”标头字段以向相关提供数据经过身份验证的用户。

以下是 csrf 相关 decotaros 在屏幕截图中显示的各个视图上的应用:来自 /comments/post/ 端点

@csrf_protect
@require_POST
def post_comment(request, next=None, using=None):
    # Fill out some initial data fields from an authenticated user, if present
    data = request.POST.copy()
    if request.user.is_authenticated():
        if not data.get('name', ''):
            data["name"] = request.user.get_full_name() or request.user.get_username()
        if not data.get('email', ''):
            data["email"] = request.user.email

从 /rest-auth/user/ 端点

@api_view(['GET'])
@permission_classes((IsAuthenticated, ))
def get_user(request, **kwargs):
    pk = request.data['pk']

    user = MyUser.objects.get(pk=pk)
    serializers = UsersSerializer(user)
    return Response(serializers.data)
4

3 回答 3

2

您使用了错误的内容类型。请更改为application/json并重试。

于 2015-12-15T09:15:27.707 回答
1

我认为您使用的是 django-rest-framework,默认情况下它附带了 csfr 令牌豁免,但邮递员正在发送一个 csfr 令牌,这就是您收到该错误的原因。

清理 cookie 可能会解决问题。

于 2015-12-15T09:36:46.447 回答
1

您的端点的装饰器是不同的,因此您需要相应地调整标头。对于您的 /rest-auth/ 查看 WWW-Authenticate 标头是必需的,如此处所述

评论视图 /comments/ 端点具有 csrf_protect 装饰器,这意味着标头必须与 cookie 中返回的 csrf-token 匹配,正如 Fede 在您的标头中提到的那样,您只需要 'X-CSRFToken' 和来自 cookie 的匹配值。

于 2015-12-15T14:48:05.140 回答