我有一个Vue SPA,我使用Axios来处理请求,使用vue-axios来应用它,使用vuex来存储令牌 . 但是当我发送请求时, Headers Authorization 变为 Bearer undefined 或 Bearer null .
流程是通过登录我检索令牌,将其保存到会话存储,调度登录操作,我的vuex存储将在会话存储的状态中设置令牌 . 在我的登录和路由器重定向到“/”之后,我想向/ foo和我的令牌发送GET请求 . 但是我的令牌未定义 . 根据控制台日志,我知道会话存储在发送请求之前确实有令牌 .
我正在关注Paweljw的this教程中的结构:
Axios/axios.js
import axios from 'axios'
export default axios.create({
baseURL: 'http://example.com/api/,
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + sessionStorage.token
}
})
Axios/index.js
import Vue from 'vue';
import VueAxios from 'vue-axios';
import axios from './axios'
Vue.use(VueAxios, axios);
export default Vue;
Components/login.vue
onLogin(res) {
if (!res.data.token) {
return this.onLoginFailed();
}
sessionStorage.token = res.data.token;
this.$store.dispatch("login");
this.$router.replace(this.$route.query.redirect || "/");
Components/foo.vue
...
this.$http
.get("foo")
.then(res => this.doSomething(res))
.catch(() => this.doSomethingElse());
如前所述,它使用 Bearer undefined 发送请求 . 我在应用程序启动时设置了'm aware that when axios.create(...) is being exported the sessionStorage.token is null - it hasn' . 而且's probably why, but I don't了解我是如何解决这个问题的 .
任何意见是极大的赞赏 .
1 回答
我怀疑本教程可能有错误 - 如果您在
axios.create
中设置 Headers ,那么Authorization
Headers 将获得sessionStorage的当前值,此时此值为undefined
.实际上,您希望在
axios.interceptors.request.use
中设置标头 - 以便在执行AJAX请求时使用sessionStorage的值填充标头 . 像这样的东西