【问题标题】:CORS 'Allow-Credentials' Nodejs/ExpressCORS“允许凭据”Nodejs/Express
【发布时间】:2018-08-17 17:56:44
【问题描述】:

我的项目在带有 Express 后端的 Node 上运行。

我正在尝试使用 Arangojs 查询我的 Arango 数据库客户端。 ArangoDB 在 Digital Ocean 上的 Docker 上运行。我在查询我的数据库服务器端没有问题,但是在页面加载时出现以下错误:

加载失败 http://0.0.0.0:8529/_db/database/_api/cursor:回复 预检请求未通过访问控制检查: 响应中的“Access-Control-Allow-Credentials”标头为“false” 当请求的凭证模式为“包含”时,它必须为“真”。 因此,Origin 'http://localhost:3000' 不允许访问。这 XMLHttpRequest 发起的请求的凭证模式是 由 withCredentials 属性控制。

我在客户端 js 上的代码如下所示:

var db = new arangojs.Database({url:'http://0.0.0.0:8529'})
db.useDatabase(dbase)
db.useBasicAuth("database", 'password')
db.query('FOR doc IN docs RETURN doc') // etc. etc.

编辑: 1 年后事后看来,这个问题非常愚蠢 - 正确答案是不要通过客户端 JS 公开您的数据库凭据...与您的后端通信,并拥有它与您的数据存储进行通信。

【问题讨论】:

  • 我在客户端 js 上的代码是这样的:。真的吗 ?您正在客户端连接到 db 吗?
  • 你应该尝试从服务器端连接数据库我认为问题会得到解决
  • 需要注意的是,发送Allow-Credentials true时,不能Allow-Origin *
  • @jayf93。这不是它的工作原理。您应该连接到服务器端的数据库并向服务器发送数据请求。

标签: javascript node.js express cors xmlhttprequest


【解决方案1】:

您正在配置 cors() 错误,您必须使用 credentials 属性才能配置 Access-Control-Allow-Credentials

var cors = require('cors');
var corsOptions = {
    origin: '*',
    credentials: true };

app.use(cors(corsOptions));

除此之外,您的app.all(* ... 不是必需的,因为app.use(cors(corsOptions)); 已经为您处理了。

【讨论】:

【解决方案2】:

当您使用凭据配置 cors 时,您必须使用“受信任” URL 或一组“受信任” URL 设置 origin,每个 URL 都具有协议 + 域 + 端口。 origin : '*' 被阻止,因为对每个来源使用凭据过于宽松。这就像根本不使用凭据一样。

【讨论】:

    猜你喜欢
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多