【问题标题】:Django CSRF cookie not set when sending JSON发送 JSON 时未设置 Django CSRF cookie
【发布时间】:2017-04-01 17:26:05
【问题描述】:

我想这个问题很蹩脚,但我实际上在发布之前尝试了一切。关于 SO 的所有问题都没有得到解答。

我的代码如下:

@csrf_protect
def login_view(request):
    if request.method == "GET":
        return HttpResponse(json.dumps(
                   {'username':request.user.username}
               ), mimetype='application/json')

Django 在提供这个视图时需要在响应中添加一个Set-Cookie 标头,但它没有。在我收到此视图的响应后,csrftoken cookie 不存在,并且它不在标题中。 CSRFMiddleware 已启用并适用于网站的其他部分。如何让 Django 设置 cookie?

请帮忙!

【问题讨论】:

    标签: django json cookies csrf django-csrf


    【解决方案1】:

    Django 在返回 json 数据时并没有给响应头设置 cookie 值,所以需要手动在响应对象中设置 cookie 值。代码如下:

    @csrf_protect
    def login_view(request):
        if request.method == "GET":
            response =  HttpResponse(json.dumps(
                       {'username':request.user.username}
                   ), mimetype='application/json')
    
            response.set_cookie('hello','world')
            return response
    

    【讨论】:

    • 您为什么不批准我的编辑?它显示了我所问的csrf 问题的答案 - 此答案中未包含的信息
    • @martinthenext 昨天被拒绝: CuberChase 昨天评论了这个: 拒绝 此编辑不正确或试图回复或评论现有帖子。 michaelb958 昨天对此进行了评论:拒绝此编辑不正确或试图回复或评论现有帖子。 dmahapatro 昨天对此进行了评论:批准 Java Devil 昨天对此进行了评论:拒绝 此编辑不正确或试图回复或评论现有帖子。
    猜你喜欢
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 2020-12-05
    • 2013-03-28
    • 2012-05-03
    • 2016-11-26
    • 1970-01-01
    相关资源
    最近更新 更多