Я обслуживаю API, который будет доступен с небольшим датчиком, отправляющим запрос POST с данными. Этот датчик имеет ограниченное программное обеспечение, и я хочу отключить защиту CSRF в представлении API.CSRF освобожден от REST View
Так я добавил декоратор:
url(
regex=r'^beacons/$',
view=csrf_exempt(ScanListCreateAPIView.as_view()),
name='beacons'
),
К сожалению, когда я выполнить POST с моим датчиком, я все еще получаю 403 ошибку:
<h1>Forbidden <span>(403)</span></h1>
<p>CSRF verification failed. Request aborted.</p>
<p>You are seeing this message because this HTTPS site requires a 'Referer
header' to be sent by your Web browser, but none was sent
. This header is
required for security reasons, to ensure that your browser is not being
hijacked by third parties.</p>
<p>If you have configured your browser to disable 'Referer' headers, please
re-enable them, at least for this site, or for HTTPS connections, or for
'same-origin' requests.</p>
Я пытаюсь добавить заголовок «Referer:» в моем POST-запросе, но у меня все еще есть ответ 403, в котором упоминается, что CSRF не удалось.
Мой запрос:
POST /api/beacons HTTP/1.1
Host: vincent.pythonanywhere.com
Content-Type: application/json
Accept: */*
User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)
Content-Length: 597
{"beacon":"aaa"," ...
Тот же запрос прошел Повсеместно ротор работает нормально, с 201 ответ.
DRF делает свой собственный материал CSRF, он жестко закодирован при использовании 'SessionAuthentication' и в противном случае отключен. Вы можете переключиться на другой механизм аутентификации. – knbk
Я пробовал с 'authentication_classes = (BasicAuthentication,)' на мой взгляд, без изменений – bixente57