javascript - axios 授权 header 仅适用于获取请求

标签 javascript api http authorization axios

我有一个简单的 api 端点用于分享帖子 /api/v1/posts/{id}/share,它需要使用不记名 token 进行身份验证。

我尝试发送如下的 POST 请求,它以 401 响应

axios.post(`/api/v1/posts/${id}/share`,
        {
        "headers": {
                "Authorization":"Bearer "+token,
                "Content-Type": "application/x-www-form-urlencoded",
                "Accept": "application/json"
            },
        });

只有当我将其更改为在后端接受 GET 并将代码更改为此时它才起作用

axios.get(`/api/v1/posts/${id}/share`,
        {
        "headers": {
                "Authorization":"Bearer "+token,
                "Content-Type": "application/x-www-form-urlencoded",
                "Accept": "application/json"
            },
        });

我用 http 客户端(失眠)测试了我的端点,所以问题似乎出在 axios 上。为什么会这样,我该如何解决?

我用的服务器是apache,后端框架是laravel

最佳答案

此问题的根本原因是:axios.postaxios.get 语法不同—— axios 中第二个参数表示“config”。 get,但代表 axios.post 中的“数据”。这就是它在 GET 中有效但在 POST 中失败的原因。

根据axios document ,这两种语法是:

axios.get(url[, config])

axios.post(url[, data[, config]])

因此,当您发送带有代码的 HTTP POST 请求时:

axios.post(`/api/v1/posts/${id}/share`,
        {
        "headers": {
                ...
            },
        });

请求已发送,HTTP body{"header":{...}} -- 没有配置请求 header 。

要使其与 axios.post 一起使用,headers 配置对象应作为第三个参数传递。如:

axios.post(`/api/v1/posts/${id}/share`,
        {}, // or whatever data you want to send.
        {
        "headers": {
                ...
            },
        });

关于javascript - axios 授权 header 仅适用于获取请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56819691/

相关文章:

java - Telegram SendMessage 私有(private) channel - 收到致命警报 : handshake_failure

http - 在 gofiber POST 请求中,如何解析请求正文?

javascript - 有没有办法使用 Web Audio API 重新采样音频流?

javascript - 如何拆分添加子属性名称的 JSON 属性值?

ios - 如何在 SWIFT 3 或 4 中的 REST API 调用期间安全地处理 cookie?

mysql - 数据库存储多种类型的数据,但需要全局唯一 ID

java - 无法通过对象输出流将对象从一个 http 处理程序发送到另一个

javascript - 将架构协议(protocol)更改为 http ://in WebView Android

javascript - 使用 fullpage.js 显示当前节号

javascript - 如何动态向存储在AMP状态的字符串添加新行?