【问题标题】:django : don't return cookie for a particular endpointdjango:不返回特定端点的 cookie
【发布时间】:2019-04-11 16:57:29
【问题描述】:

我需要从 Django 返回响应而不返回 cookie。

我正在尝试实现一个 webhook 客户端 API,它需要:

  • https的使用
  • 5 秒内响应
  • 响应中没有正文
  • 响应标头中没有 cookie
  • 无效 hmac 签名的 401 未授权状态代码

我正在开发 Django 1.10(即将升级到 2.x),其中应用程序的其余部分受到用户通过会话验证的保护。

部分端点视图如下:

response200 = HttpResponse(status=200)
response401 = HttpResponse(status=401)
response401.close()  # attempt not to set cookie

signature = request.META.get('HTTP_WEBHOOK_SIGNATURE')

if not request.method == 'POST':
    return response401
if not signature:
    return response401

等等。

但是我试图避免使用response401.close() 设置会话不起作用。我也试过del response401['Set-Cookie']see Django docs

cookie LocalTest... 仍然在这个 curl 会话中设置:

$ curl -d "param1=value1&param2=value2" \
       -H "webhook-signature: $SIGVAL" \
       -H "Content-Type: application/x-www-form-urlencoded" \
       -X POST http://127.0.0.1:8000/invoices/webhookendpoint \
       -w "\n" -v
...
* Connected to 127.0.0.1 (127.0.0.1) port 8000 (#0)
> POST /invoices/webhookendpoint HTTP/1.1
> Host: 127.0.0.1:8000
> User-Agent: curl/7.52.1
> Accept: */*
> x-xero-signature: ZSlYlcsLbYmas53uHNrBFiVL0bLbIKetQI6x8JausfA=n
> Content-Type: application/x-www-form-urlencoded
> Content-Length: 27
> 
* upload completely sent off: 27 out of 27 bytes
* HTTP 1.0, assume close after body
< HTTP/1.0 401 Unauthorized
< Date: Thu, 11 Apr 2019 08:32:50 GMT
< Server: WSGIServer/0.1 Python/2.7.13
< Vary: Cookie
< Content-Type: text/html; charset=utf-8
< Set-Cookie:  LocalTest=gwx7jhsshy2qvtct1rmzv86h7xshe6ot; httponly; Path=/
< 
* Curl_http_done: called premature == 0
* Closing connection 0

【问题讨论】:

    标签: django cookies django-views


    【解决方案1】:

    看来这行得通:

    # ensure no cookie header is set
    del request.session
    response200 = HttpResponse(status=200)
    response401 = HttpResponse(status=401)
    ...
    

    如 curl 响应所示:

    < HTTP/1.0 200 OK
    < Date: Thu, 11 Apr 2019 08:49:28 GMT
    < Server: WSGIServer/0.1 Python/2.7.13
    < Content-Type: text/html; charset=utf-8
    < 
    

    当然,如果您以登录用户的身份访问此端点,则必须再次登录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-28
      • 2018-05-02
      • 2017-09-07
      • 1970-01-01
      • 2021-10-27
      • 1970-01-01
      • 2016-10-21
      相关资源
      最近更新 更多