axios拦截器拦截失败

发布于 2022-09-06 13:13:16 字数 800 浏览 13 评论 0

我在做一个jwt认证的功能.想要每次请求的时候带上一个后台传回来的token.所以我在main.js里加了个拦截器.想在每一次请求的时候在header里带上我的token.但是拦截器只在某一部分的请求.在某一些请求的header中加token.在有一些请求里又不能加token.我想问下怎么解决这个问题?我也尝试了在单独请求前设置header.依然没效果.请各位大佬指点迷津

1.我在main.js里加了拦截器

clipboard.png

2.这是正常可以拦截.已经在头上加上了token的请求

clipboard.png

3.但是在某些请求的时候就没有token

clipboard.png

顺便说一下.如果我把这个请求路径换一下或者故意改成错的.他就能加到我的请求上.所以我在怀疑是不是同步异步的问题

第一次提问.感谢解惑

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

野味少女 2022-09-13 13:13:16

这得看代码才能解决,基本上是代码问题。建议将 axios 单独封装成 fetch() 并将配置统一在一个地方, 然后每次发的请求都走 fetch 确保都被拦截到

export default function fetch(options) {
    return new Promise((resolve, reject) => {
        const instance = axios.create({
            // 所有请求都会带上这些配置
            headers: {
                'Content-Type': 'application/json'
            },
            timeout: 30 * 1000 // 30s 超时
        });

        // 发起请求时,会执行该方法
        instance.interceptors.request.use(options => {
            //...
            return options
        }, err => {
            return reject(err)
        })

        //接收到后台的数据时执行的方法
        instance.interceptors.response.use(response => response, err => resolve(err.response))

        instance(options)
            .then(response => { // 成功请求
                resolve(response)
            })
            .catch(error => { // 失败请求
                console.error('请求异常:' + error)
                reject(error)
            })
    })
}
空城旧梦 2022-09-13 13:13:16

你看一下是不是token获取的方式不行,这样试试:

const token = localStorage.getItem("token");

保存的时候是使用localStorage.setItem("token",xxx)

心舞飞扬 2022-09-13 13:13:16

1.建议封装下
2.建议在api配置的时候加上参数用来决定是否在header中带token

export const API = {
    login:{
        url: '////',
        method: 'post',
        token: true
    },
    ...
}

我们对请求做了封装,可以传一个api接口对象,在拦截器里在对最终对传参序列化

3.可以把token存在缓存,判断没有时再去storage中取

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文