[英]How to configure Authorization bearer token in axios?
您好,我创建了一个登录操作(使用 Vuex),它将用户 jwt 令牌保存到本地存储。 在此登录操作中,我调用另一个操作来获取该用户创建的一些帖子。 当我在 fetchPosts 操作的 get 请求的 header 中传递令牌时,它工作得很好。
async login(context, user){
try {
const res = await api.post('/users/login', user)
localStorage.setItem('jwt', res.data.token)
context.commit('SET_USER', res.data.user)
context.dispatch('fetchPosts')
}catch(err){
console.log(err.response.data)
}
}
async fetchPosts(context){
try {
const res = await api.get('/posts', {
headers: {
Authorization: `Bearer ${localStorage.getItem('jwt')}`
}
})
context.commit('SET_POSTS', res.data)
}catch(err){
console.log(err.response.data)
}
}
上面的代码工作得很好,但问题是我有几个授权路线,我不想通过
headers: { Authorization: `Bearer ${localStorage.getItem('jwt')}`}
对于所有 api 请求。
我想在 1 个文件中进行配置,我试过了,但是当我登录时,我收到未经身份验证的消息,当我检查 .networks 选项卡时,我看到 Bearer null 已通过授权。 请参阅下面我的配置尝试。
import axios from 'axios'
export default axios.create({
baseURL: 'http://localhost:3000',
headers: {
Authorization: `Bearer ${localStorage.getItem('jwt')}`
}
})
任何人都知道我哪里出错了或者我可以做些什么来解决这个问题。
这是一个简单的例子来说明如何做到这一点。
axios.interceptors.request.use(
(config) => {
const token = localStorage.getItem('authtoken');
if (token) {
config.headers['Authorization'] = `Bearer ${token}`;
}
return config;
},
(error) => {
return Promise.reject(error);
}
);
在此处查找更多信息
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
将此添加到您的 main.js 文件中
axios.interceptors.request.use(config => {
const token = localStorage.getItem("jwt");
config.headers["Authorization"] = `Bearer ${token}`;
return config;
});
您可以直接在您创建的 axios 实例上应用拦截器
import axios from "axios";
const baseDomain = process.env.VUE_APP_API_URL;
const baseURL = `${baseDomain}`;
const instance = axios.create({
baseURL
});
instance.interceptors.request.use(
(config) => {
const token = localStorage.getItem('accesstoken');
if (token) {
config.headers['Authorization'] = `Bearer ${token}`;
}
return config;
},
(error) => {
return Promise.reject(error);
}
);
export default instance;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.