我正在尝试从商店操作中进行GET调用。但是,我的Vue.http.get()
来电会引发TypeError
"这是空的"。
我完全失去了,我还没有找到其他人在其他地方遇到这个具体问题。任何帮助,将不胜感激。感谢
Vue.http
注意,令牌正确存储在state和localStorage中。
methods: {
submit() {
this.$http.post(
this.loginEndpoint,
this.object
).then(response => {
this.$store.dispatch({
"type": "auth/save",
"token": response.body.key,
}).then(() => {
this.$router.push({name: "home"})
}).catch(error => {
console.log(error)
})
}).catch(error => {
console.log(error)
})
}
}
import Vue from 'vue'
import Vuex from 'vuex'
import Auth from '../stores/auth.js'
// plugins
Vue.use(Vuex)
export default new Vuex.Store({
modules: {
auth: Auth,
},
})
import Vue from 'vue'
export default {
namespaced: true,
state: {
token: null,
profile: {},
},
mutations: {
setProfile(state, payload) {
state.profile = payload.profile
},
setToken(state, payload) {
state.token = payload.token
},
},
actions: {
save: (context, payload) => {
return new Promise((resolve, reject) => {
const url = "/rest-auth/user/"
context.commit('setToken', {
token: payload.token,
})
localStorage.setItem("token", payload.token)
console.log("get user profile")
// *** Error below calling Vue.http.get ***
// TypeError: this is null
Vue.http.get(url).then(response => {
console.log("Profile received")
context.commit('setProfile', {
profile: response.body,
})
localStorage.setItem("profile", response.body)
resolve()
}).catch(error => {
reject(error)
})
})
},
},
}
TypeError: this is null
Stack trace:
@webpack-internal:///10:42:9
exec@webpack-internal:///6:1150:21
Client/<@webpack-internal:///6:1179:13
PromiseObj@webpack-internal:///6:200:24
Client@webpack-internal:///6:1143:16
Http@webpack-internal:///6:1400:12
Http[method$$1]@webpack-internal:///6:1431:16
save/<@webpack-internal:///14:112:17
save@webpack-internal:///14:90:20
wrappedActionHandler@webpack-internal:///7:604:15
dispatch@webpack-internal:///7:347:7
boundDispatch@webpack-internal:///7:272:12
submit/<@webpack-internal:///17:100:17
答案 0 :(得分:0)
事实证明,我的Vue实例中的代码导致了问题。在那里,我将csrf值推送到X-CSRFTOKEN
标题。
我正在使用Django和DRF。我刚刚从SessionAuthentication
切换到使用TokenAuthentication
,现在已经知道不需要传递csrf令牌。
以下代码来自我的main.js
,删除后问题已解决。
/* Add the csrf token to the request header */
Vue.http.interceptors.push(function(request, next) {
let token = this.$cookie.get("csrftoken")
request.headers.set('X-CSRFTOKEN', token)
next()
});
究竟为什么导致TypeError
被抛出我无法说出来。