Django会话身份验证和Axios POST信号

问题描述 投票:0回答:1

我使用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 reactjs django-rest-framework axios
1个回答
1
投票

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 } })
}
© www.soinside.com 2019 - 2024. All rights reserved.