【发布时间】:2018-03-15 11:26:49
【问题描述】:
csrftoken 存储在哪里?
当我访问一个 API 端点时(注销 API,它不需要参数):
POST /rest-auth/logout/ HTTP/1.1
Host: 10.10.10.105:8001
Connection: keep-alive
Content-Length: 0
Accept: application/json, text/plain, */*
Origin: http://localhost:8080
Authorization: Token 0fe2977498e51ed12ddc93026b08ab0b1a06a434
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36
Referer: http://localhost:8080/register
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: sessionid=b95zopro0qvkrexj8kq6mzo1d3z2hvbl; csrftoken=z53lKL0f7VHkilYS5Ax8FMaQCU2ceouje9OeTJOgTy4gH0UgHVltAlOe2KFNNNB6
标题在上面。在响应中我收到一个错误:
{"detail":"CSRF Failed: CSRF token missing or incorrect."}
所以,后端一定已经验证了csrftoken。
在后台数据库中找不到csrftoken字段:
所以我想知道它在加密的session_data中保存在哪里?
【问题讨论】:
-
默认情况下,csrf 令牌存储在 cookie 中。你不会在数据库中找到它。如果您想将其存储在会话数据中,您可以设置CSRF_USE_SESSIONS。
-
但是如果后端不存储
csrftoken怎么验证呢? -
如果您在 DRF 或任何 API 中,您可以排除
csrf验证。 -
你在哪里需要 csrf_token?
标签: python django django-csrf csrf-token