背景:vue使用Network进行登录的时候 报错 403,但是在localhost的时候就没问题,进行了一下对比,network header中多了一个cookie,local中就没有,再结合django默认有csrf跨站点请求伪造,翻了翻文档,得知需要在header中添加X-CSRFToken,解决办法如下:
解决办法:
在vue-admin-template utils/request.js中加入获取csrftoken的方法
原先的方法是在有token的情况下vue才会在header中加入token,但是登录的时候是没有token状态的,所以添加一下csrftoken就可以了
const getCookie = function(name) {
var value = '; ' + document.cookie
var parts = value.split('; ' + name + '=')
if (parts.length === 2) return parts.pop().split(';').shift()
}
// request interceptor
service.interceptors.request.use(
config => {
// do something before request is sent
if (store.getters.token) {
// let each request carry token
// ['X-Token'] is a custom headers key
config.headers['Authorization'] = 'Token ' + getToken()
config.headers['X-CSRFToken'] = getCookie('csrftoken')
} else {
config.headers['X-CSRFToken'] = getCookie('csrftoken')
}
return config
},