我使用Django Rest框架会话身份验证,用户登录后,我可以使用可浏览的API成功执行POST请求(/ api / post / 1 / like /)。
为什么我不能使用axios发布? (Django服务器必须有用户实例才能保存上述API)
尽管我以管理员用户身份登录,但我希望POST信号可能不知道已登录的用户
AXIOS功能
const likebutton = (id)=>{
axios.post(`/api/post/${id}/like/`)
}
错误
Error: Request failed with status code 403
at createError (createError.js:16)
at settle (settle.js:17)
at XMLHttpRequest.handleLoad (xhr.js:61)
从django docs,您可以使用以下脚本获取csrftoken
:
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie !== '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i].trim();
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
var csrftoken = getCookie('csrftoken');
或者,使用Javascript Cookie Library:
var csrftoken = Cookies.get('csrftoken');
然后,您所要做的就是更新您的axios
调用以将其作为标题发送:
const likebutton = (id) => {
axios.post(`/api/post/${id}/like/`, { headers: { 'X-CSRFToken': csrftoken } })
}