django: не возвращать cookie для конкретной конечной точки - PullRequest
1 голос
/ 11 апреля 2019

Мне нужно вернуть ответ от Django без возврата cookie.

Я пытаюсь реализовать клиентский API webhook, который требует:

  • использование https
  • ответ в течение 5 секунд
  • нет тела в ответе
  • нет файлов cookie в заголовках ответа
  • 401 несанкционированный код состояния для недопустимых подписей hmac

Я работаю над 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'] см. 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

1 Ответ

1 голос
/ 11 апреля 2019

Похоже, что это работает:

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

как показано в ответе скручивания:

< 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
< 

Естественно, если вы войдете в эту конечную точку как вошедший в систему пользователь, вам придется снова войти в систему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...