javascript - 如何在axios中配置授权承载 token ?

标签 javascript vue.js axios jwt vuex

您好,我创建了一个登录操作(使用 Vuex),它将用户 jwt token 保存到本地存储。在这个登录 Action 中,我调用另一个 Action 来获取该用户创建的一些帖子。当我在 fetchPosts 操作的获取请求的 header 中传递 token 时,它工作得很好。

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 个文件中进行配置,我尝试过,但是当我登录时,我收到未经身份验证的消息,当我 checkin 网络选项卡时,我看到 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);
        }
    );

查找更多信息here

关于javascript - 如何在axios中配置授权承载 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67937204/

相关文章:

javascript - Vue router-link 和自定义事件

javascript - 为什么我无法在控制台中显示 api 的内容(出现 401 错误)?

c# - 发送帖子请求多部分表单数据。来自某些 Microsoft 服务的错​​误 "Line length limit 100 exceeded"

javascript - Angular: Bootstrap 背景在不应该显示的时候显示

用于从组合框中获取选定值的 JavaScript 代码

vue.js - 无法导入由 vue-cli-service 构建的 Vue 组件

vue.js - 使用vuex的vue 2 JS中的axios拦截器

javascript - node.js websocket发送自定义数据

javascript - 如何: Simulate click OK in WebBrowser alert/messagebox that initiated by a JavaScript?(德尔福)

javascript - 单选按钮显示为当前值