CORS“允许凭证” Nodejs / Express

1 javascript xmlhttprequest node.js cors express

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

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

无法加载 http://0.0.0.0:8529/_db/database/_api/cursor:对预检请求的响应未通过访问控制检查:响应中“ Access-Control-Allow-Credentials”标头的值为'false',当请求的凭据模式为'include'时必须为'true'。因此,不允许访问源' 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.
Run Code Online (Sandbox Code Playgroud)

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

gui*_*job 5

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

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

app.use(cors(corsOptions));
Run Code Online (Sandbox Code Playgroud)

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

  • 将 origin 设置为 * 真的可以使用凭据吗?如果 Access-Control-Allow-Origin 设置为 *,是否应该阻止带有凭据标志的请求?https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/CORSNotSupportingCredentials (3认同)
  • 如果您配置 `origin: "*"` 凭证机制将不起作用。如果您希望凭据起作用,则必须指定准确的 http 来源。例如:`origin: 'https://www.google.com'` 或具有多个来源的数组:`origin: [a, b, c]` (2认同)

小智 5

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