javascript - 在 axios 操作上保持令牌更新
问题描述
我想使用一个 Express REST API,它需要为某些路由提供有效的 json Web 令牌。由于每次我想创建“Axios 配置文件”时都必须从本地存储中传递令牌。
我的文件http.js包含以下代码
import Vue from "vue";
import axios from "axios";
const devInstance = createInstance("http://localhost:3000");
devInstance.interceptors.request.use(config => {
console.log(config);
return config;
}, err => {
console.log(err);
return Promise.reject(err);
});
devInstance.interceptors.response.use(res => {
console.log(res);
return res;
}, err => {
console.log(err);
return Promise.reject(err);
});
const productionInstance = createInstance("http://www.myApi.com");
function createInstance(baseURL){
return axios.create({
baseURL,
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${localStorage.token}`
}
});
}
Vue.prototype.$http = devInstance; // Check debug/build mode
在我的main.js 中,我将这个实例导入一次
import http from "./http.js";
从现在开始,我可以使用它this.$http
来获取全局 axios 实例而无需导入它。
使用 APIlocalStorage.token
时返回未定义,因为在创建实例时未设置。
如何Authorization
在不每次手动传递令牌的情况下更新此属性?
解决方案
我认为您应该编写一个请求拦截器,将Authorization
标头添加到所有请求中。
devInstance.interceptors.request.use((config) => {
config.headers.Authorization = `Bearer ${localStorage.token}`;
return config;
}, (error) => Promise.reject(error));
这样,您将始终获得当前存储的令牌。
推荐阅读
- javascript - 赛普拉斯在命令日志中看不到请求
- javascript - Vue-simple-suggest 在从 vuex 加载数据时将 v-model 转换为 null
- python - Discord 版主机器人
- r - R:将连续项目配对到新的单独列中
- java - Java中的问题冒泡排序泛型类型
- firebase - 如何在firebase托管的一台服务器上部署nodejs服务器(发送电子邮件)和vuejs应用程序
- stenciljs - 需要帮助为 Stencil 设置类名
- javascript - 如何在 laravel 中使用日期选择器?
- jquery - 尝试使用 jquery 将值传递给 mvc 控制器
- elasticsearch-7 - 非嵌套对象的ES范围查询和嵌套对象的查询词