Axios - 仅在 1 次调用中删除标头授权

Posted

技术标签:

【中文标题】Axios - 仅在 1 次调用中删除标头授权【英文标题】:Axios - Remove headers Authorization in 1 call only 【发布时间】:2018-03-21 06:07:05 【问题描述】:

如何仅在 1 次调用中删除 axios.defaults.headers.common.Authorization?

我正在为对我的域的所有调用设置默认值,但是我在另一个域上进行了 1 个调用,如果传递了令牌,调用会给我一个错误,当没有保存默认 Auth 令牌时一切正常.

所以我想要做的不是在该特定调用中传递 Auth

我试过了,但是不行

    loadApiCoins( commit ) 
        Vue.axios(
            method: 'get',
            url: 'https://api.coinmarketcap.com/v1/ticker/',
            headers: 
                'Authorization': '',
            ,
        ).then(...)
    ,

我也尝试过 auth: ... 但这也不起作用。 解决方案是什么? 谢谢

【问题讨论】:

【参考方案1】:

要扩展@phantomraa 的答案,您可能需要使用

this.$axios.$get(
      url, 
      // modify auth header for current request only
      transformRequest: (data, headers) => 
        // prevent the header from being added by default
        delete headers.common['Authorization'];
        // some libraries might set it directly as well, e.g. nuxtjs/auth
        delete headers['Authorization'];
        return data;
      
)

抱歉,需要更多代表才能发表评论。

【讨论】:

【参考方案2】:

删除 axios.defaults.headers.common["language"];

【讨论】:

【参考方案3】:
delete request.defaults.headers.common.Authorization

request 应该是 $axios.create() 的返回

【讨论】:

【参考方案4】:

要发送请求而不:

修改全局axios 默认值 创建一个新的axios 实例

类似地更改您的请求:

axios.get('http://example.com', transformRequest: (data, headers) => 
    delete headers.common['Authorization'];
    return data;
  
);

我正在寻找的答案已发布在 Apurva jain 的答案的 cmets 中,但尚未单独发布,因此我将其单独发布以方便参考:)

【讨论】:

如果您希望删除所有默认标头,也可以在回调中简单地删除 headers.common 这个答案使用的语法与 Apurva jain 的评论不同。 transformRequest: [(data, headers) => delete headers.common.Authorization return data ] 是一个数组,返回数据参数。 transformRequest: (data, headers) => delete headers.common['Authorization']; 是一个没有返回值的函数。第一种格式对我有用。 谢谢 brianf - 我现在已经相应地更新了我的答案。【参考方案5】:

一个简单的解决方案是从新的 axios 实例中删除所有常见的标头:

const awsAxios = axios.create(
    transformRequest: (data, headers) => 
        // Remove all shared headers
        delete headers.common;
        // or just the auth header
        delete headers.common.Authorization;
    
);

【讨论】:

【参考方案6】:

试试下面的

delete axios.defaults.headers.common["Authorization"];
// or which ever header you have to remove

【讨论】:

但这不会删除所有请求的身份验证吗?我仍然需要将令牌用于在此特定请求之后不久发生的其他请求 你可以试试这个transformRequest: [(data, headers) => delete headers.common.Authorization return data ] 我指的是github库上的以下问题-> axios/issue 这似乎有效!状态:200 从未如此出色。我很生气,昨天我花了很多时间处理 Axios 问题,但没有找到。大声笑 所以这将保留其他调用的令牌对吗?【参考方案7】:

如果您已经为所有请求设置了默认“授权” 您可以为该特定请求创建一个实例

var instance = axios.create();
delete instance.defaults.headers.common['Authorization'];

instance.get("http://api.com");

【讨论】:

【参考方案8】:

我在尝试使用我的 Web 服务身份验证令牌查询 S3 时遇到了同样的问题。用这个修复它。

axios.get("http://api.com", 
        headers: Authorization:""
);

您可以将默认标题更改为空字符串,这不会影响常见的默认标题。虽然不完全确定是否所有 Web 服务都会忽略空字符串标头。

【讨论】:

是的,但是如果您使用像 aws 这样的服务,这可能是个问题【参考方案9】:

delete axios.defaults.headers.common["Authorization"]; 将解决问题。但请记住加回授权标头

【讨论】:

以上是关于Axios - 仅在 1 次调用中删除标头授权的主要内容,如果未能解决你的问题,请参考以下文章

防止 nuxt auth 将授权标头发送到外部 url

如何从请求中删除授权标头[重复]

使用标头参数的邮递员授权工作但不适用于 Axios 标头

如何在 React Native 中使用 Axios 设置授权标头

axios 授权标头/CORS 错误

在 axios 中设置授权标头