如何在axios中配置授权承载令牌?

Sy3*_*y3d 7 javascript jwt vue.js axios vuex

您好,我创建了一个登录操作(使用 Vuex),它将用户 jwt 令牌保存到本地存储。在此登录操作中,我调用另一个操作来获取该用户创建的一些帖子。当我在 fetchPosts 操作的获取请求标头中传递令牌时,它工作得完全正常。

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)
     }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码工作得很好,但问题是我有几个身份验证路线,我不想通过

headers: { Authorization: `Bearer ${localStorage.getItem('jwt')}`}
Run Code Online (Sandbox Code Playgroud)

对于所有 api 请求。

我想在 1 个文件中进行配置,我尝试过,但是当我登录时,我收到未经身份验证的消息,当我检查网络选项卡时,我看到 Bearer null 传递到授权中。请参阅下面我的配置尝试。

import axios from 'axios'
export default axios.create({
  baseURL: 'http://localhost:3000',
  headers: {
    Authorization: `Bearer ${localStorage.getItem('jwt')}`
  }
})
Run Code Online (Sandbox Code Playgroud)

任何人都知道我哪里出了问题或者我可以采取什么措施来解决这个问题。

Cyb*_*nal 10

这是一个如何执行此操作的简单示例。

    axios.interceptors.request.use(
        (config) => {
            const token = localStorage.getItem('authtoken');
    
            if (token) {
                config.headers['Authorization'] = `Bearer ${token}`;
            }
    
            return config;
        },
    
        (error) => {
            return Promise.reject(error);
        }
    );

Run Code Online (Sandbox Code Playgroud)

在这里找到更多信息