我当前遇到一个挑战,为我使用 ExpressJS 实现的响应发送的 Cookie 设置域,但目前它只是设置我的 ExpressJS 服务器端点的 IP 地址。
这是我最初的 CORS 配置:
router.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "http://localhost:3000");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With,
Content-Type, Accept, pwd, email");
next();
});
这是我的身份验证部分中的
res.cookie
行:
res.cookie('token', token, {domain: "localhost", expires: new
Date(Date.now() + 600000*100000), httpOnly: true});
当我使用 Chrome 登录时,很奇怪的是,我得到了 cookie,但在我的expressjs端点的 IP 地址下,可以说“http://88.13.91.0”,所以当我刷新时,我会丢失它。我在 ExpressJS API 的响应中也没有看到响应中的“set-cookie”标头,但我确实得到了 cookie。我已经清除了 cookie,以确保它在尝试登录后出现,这样我就知道它还没有过时。我还在我的获取调用中将“凭据”设置为“包含”,如记录的那样,但没有运气。
我的问题是,如果域与端点不同,我是否无法设置域?我的想法是,也许这是一个安全问题,结果被阻止,因为没有人应该能够为不存在的域设置 cookie,或者也许我错了。
尝试像这样的 CORS 并且
import * as cors from "cors";
// 或
const cors = require ('cors');
app.get("/", function (req, res) {
res.setHeader("Content-Type", "application/x-www-form-urlencoded");
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept"
);
res.setHeader("Access-Control-Allow-Credentials", true);
将其添加到所有中间件之上
app.use(cors());