【发布时间】:2021-09-29 23:06:48
【问题描述】:
我用django rest框架开发了一个API,我的前端是用vue js构建的,所以我必须使用fetch来与API通信。
function apiService(endpoint, method, data) {
const config = {
method: method || 'GET',
body: data !== undefined ? JSON.stringify(data) : null,
headers: {
'content-type': 'application/json',
'X-CSRFToken': CSRF_TOKEN
}
};
return fetch(endpoint, config)
.then(data => getJson(data))
.catch(err => err)
};
我注意到这段代码可以正常工作,但我有疑问,因为我已经在 api 上添加了身份验证权限,所以我必须在请求中发送一个令牌,因为我是没有从浏览器连接。那么,如果我不发送,这个令牌是如何发送到 api 的。
【问题讨论】:
-
它通常会发送一个带有 session-id 的 cookie,因此 Django 会查找该 session id 是否有用户登录。
-
@在控制台WillemVanOnsem I型 '的document.cookie',这是输出: “tabstyle = HTML标签; _xsrf = 2 | d1f3c838 | d65d796531602abc0a275dcdb1e0096d | 1626274319; csrftoken = p3lY4bWKdgphgLyguZR0m9bB4iX57VtrotbzZZgQRbaIQSZ1v5oTJmNjjtz3rXA8”,所以有不是会话 ID。
-
document.cookies确实 not 包含sessionid的 cookie:stackoverflow.com/questions/39356004/… 这是用作防止恶意 JavaScript 代码“窃取”会话 ID 的安全机制,并重用它来发出其他请求。 -
我会建议你打开浏览器的开发者控制台,并阅读你提出的请求的标题。
-
好的,非常感谢。
标签: javascript django django-rest-framework