【问题标题】:Send Authentication header with fetch or axios使用 fetch 或 axios 发送身份验证标头
【发布时间】:2018-10-08 08:43:01
【问题描述】:

如何使用fetchaxios 发送身份验证标头?

我已经尝试过这样做,但它在我的客户端没有任何带有 Authentification 值的标头。

这是我的代码示例。

let myHeaders = new Headers();
myHeaders.append("Authorization", token);
myHeaders.append("Access-Control-Allow-Origin", "*");
myHeaders.append("Access-Control-Allow-Origin", "*");

let req = {
        method: "GET",
        headers: myHeaders,
        mode: "no-cors",
        credentials: "same-origin",
    }
    fetch('http://localhost:5000/secret', req)
        .then(res => console.log(res))
        .catch(err => console.log(err))

我尝试在我的 node.js 代码上检查它。

router.route("/").get(passportJWT, SecretController.secret);

【问题讨论】:

  • “不起作用”不是一个有用的问题陈述。清楚地描述错误、响应或问题。请注意,定义明确的问题已经解决了一半
  • 您是从同一来源获取的吗?尝试credentials: "include",
  • Access-Control-Allow-Origin 是一个 response 标头;它不属于请求!
  • mode: "no-cors" — 你为什么要这么做?
  • @TiagoCoelho 是的,我是。

标签: javascript node.js reactjs fetch axios


【解决方案1】:

要使两个来源被视为“相同”,它们必须共享:

  • 方案(例如 https)
  • 主机名
  • 端口

您正在从http://localhost:3000http://localhost:5000 发出请求,因此正在发出跨域请求。

credentials: "same-origin"

…但您已将凭据(如 Authorization)限制为 same-origin 请求。

mode: "no-cors",

要通过跨域请求发送凭据,您必须通过 CORS 获得权限。

你不能设置no-cors

你需要

mode: "cors",
credentials: "include"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 2012-04-24
    • 2019-02-21
    • 2019-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多