【问题标题】:Django comments CSRF errorDjango 评论 CSRF 错误
【发布时间】:2016-03-20 23:37:51
【问题描述】:

得到一个 csrf 错误我不知道如何修复,我已经休息 auth 工作,用户能够像这样更新他们的详细信息:

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

我想消除 /cmets/post/ 端点上的此错误,以便此端点的行为类似于 /rest-auth/user/ 视图,它接受“授权:令牌 792b5fb27b4fe805e895c91274f26b6ab13cb654”标头字段以提供相关信息向经过身份验证的用户发送数据。

以下是 csrf 相关 decotaros 对屏幕截图中显示的各个视图的应用: 从 /cmets/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)

【问题讨论】:

    标签: django django-rest-framework csrf django-comments django-rest-auth


    【解决方案1】:

    您使用了错误的内容类型。请将其更改为application/json,然后重试。

    【讨论】:

    【解决方案2】:

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

    cmets 视图 /cmets/ 端点具有 csrf_protect 装饰器,这意味着标头必须与 cookie 中返回的 csrf-token 匹配,正如 Fede 在您的标头中提到的那样,您只需要具有匹配值的“X-CSRFToken”曲奇饼。

    【讨论】:

      【解决方案3】:

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

      清理 cookie 可能会解决问题。

      【讨论】:

      猜你喜欢
      • 2012-04-16
      • 2011-09-28
      • 2019-01-09
      • 1970-01-01
      • 2011-07-11
      • 2011-10-06
      • 2014-08-27
      • 1970-01-01
      • 2014-12-11
      相关资源
      最近更新 更多