【发布时间】:2020-04-07 05:26:58
【问题描述】:
我正在制作的应用程序的前端和节点后端分别托管(跨源)。前端正在调用后端进行登录,其中 x-session-token 被发回。因为这是一个自定义标头,我理解这是一个复杂的请求,因此需要进行飞行前检查。
在 server.js 文件中,我有以下 sn-p(据我所知,它可以启用 CORS 飞行前检查):
const express = require('express');
const cors = require("cors");
const app = express();
const corsOptions = {
origin: true,
credentials: true
}
app.options('*', cors(corsOptions));
前端进行如下 axios 调用:
axios.post('/api/user/login', logInObj,
{withCredentials:true},
{crossDomain:true},
{'Access-Control-Request-Headers': 'Content-Type'},
{'Access-Control-Request-Method': 'post'}
)
.then(logInResponse => ...
后端对此有响应:
router.post('/api/user/login', (request, response) => {
...
response.setHeader('Access-Control-Allow-Credentials', true);
response.setHeader('Access-Control-Allow-Headers', 'Content-Type');
response.setHeader('Access-Control-Allow-Method', 'get', 'post', 'options');
response.setHeader('Access-Control-Allow-Origin', request.get('Origin'));
response.setHeader('Access-Control-Max-Age','86400')
response.setHeader('Access-Control-Expose-Headers', 'Access-Control-Allow-Origin');
...
当我在后端控制台记录响应标头时,它包含:
一个 x-session-token 与 MySQL 中的相匹配
Access-Control-Allow-Origin 被列为 http://localhost:3000 而不是通配符 (*)
但是,浏览器中响应的 console.log 中的 session-token 为 null,这告诉我浏览器正在阻止 CORS 返回数据(在本例中为 X-Session-Token)。我在请求或响应标头中缺少什么?
【问题讨论】:
标签: node.js express cors axios session-cookies