Django-REST-framework的所有post请求都需要带上csrftoken。
resfull框架自带一个csrftoken.js但是是jq写的,vue不想用jq。
然后想办法把自定义axios,在全局header信息中加入X-CSRFToken。
vue-cli安装的vue,可以勾选上axios插件。
src>plugins此目录下,会自动生成axios.js的配置文件。
修改配置文件:
1、添加切割字符串的方法;
2、使用axios.interceptors.request.use()请求拦截器,添加X-CSRFToken的header信息。
const _axios = axios.create(config);
//切割字符串
let getCookie = function (name, token) {
var value = '; ' + token
var parts = value.split('; ' + name + '=')
if (parts.length === 2) return parts.pop().split(';').shift()
}
_axios.interceptors.request.use(
function(config) {
// 在post请求前统一添加X-CSRFToken的header信息
let token = document.cookie;
if(token && config.method == 'post'){
config.headers['X-CSRFToken'] = getCookie('csrftoken',token);
}
return config;
},
function(error) {
// Do something with request error
return Promise.reject(error);
}
);
网友评论