Node.js 为什么cookie没有被发送到服务器
我有一个托管在服务器上的nodejs express应用程序。基本上,我有两个端点:Node.js 为什么cookie没有被发送到服务器,node.js,angular,express,cookies,Node.js,Angular,Express,Cookies,我有一个托管在服务器上的nodejs express应用程序。基本上,我有两个端点: POST/session-这是我发回cookie的地方 获取/resource-这是我检查cookie是否被发回的地方,如果没有,我发回401 not found,如下所示 在前端,它位于不同的域上(例如,一个新生成的angular cli应用程序正在htpp://localhost:4200),我尝试调用/sessionAPI,它返回cookie头,但是连续的/resourceAPI调用不会将cookie
- POST
-这是我发回cookie的地方/session
- 获取
-这是我检查cookie是否被发回的地方,如果没有,我发回401 not found,如下所示/resource
/session
API,它返回cookie头,但是连续的/resource
API调用不会将cookie发送回服务器。我做错了什么
服务代码如下:
// server.js
const express = require("express");
const app = express();
const cookieParser = require("cookie-parser");
const cors = require("cors");
app.use(cors());
app.use((req, res, next) => {
console.log(req.method, req.url, JSON.stringify(req.headers, null, 2));
next();
});
app.use(cookieParser());
app.get("/", (req, res) => {
res.send({ status: "running" });
});
app.post("/session", (req, res) => {
const cookie = `AuthSession=token; Path=/;`;
res.setHeader("Set-Cookie", cookie);
res.send({ status: "logged in" });
});
app.get("/resource", (req, res) => {
const authSessionCookie = req.cookies && req.cookies["AuthSession"];
if (!authSessionCookie) {
res.sendStatus(401);
return;
}
res.send({ resource: "resource" });
});
const listener = app.listen(process.env.PORT, () => {
console.log("Your app is listening on port " + listener.address().port);
});
export class AppComponent {
constructor(private readonly httpClient: HttpClient) {
this.httpClient
.post("https://uneven-glowing-scorpion.glitch.me/session", {})
.subscribe(resp => {
console.log(resp);
this.httpClient
.get("https://uneven-glowing-scorpion.glitch.me/resource")
.subscribe(resp => {
console.log(resp);
});
});
}
}
这是由/session API返回的cookie:
角度代码如下:
// server.js
const express = require("express");
const app = express();
const cookieParser = require("cookie-parser");
const cors = require("cors");
app.use(cors());
app.use((req, res, next) => {
console.log(req.method, req.url, JSON.stringify(req.headers, null, 2));
next();
});
app.use(cookieParser());
app.get("/", (req, res) => {
res.send({ status: "running" });
});
app.post("/session", (req, res) => {
const cookie = `AuthSession=token; Path=/;`;
res.setHeader("Set-Cookie", cookie);
res.send({ status: "logged in" });
});
app.get("/resource", (req, res) => {
const authSessionCookie = req.cookies && req.cookies["AuthSession"];
if (!authSessionCookie) {
res.sendStatus(401);
return;
}
res.send({ resource: "resource" });
});
const listener = app.listen(process.env.PORT, () => {
console.log("Your app is listening on port " + listener.address().port);
});
export class AppComponent {
constructor(private readonly httpClient: HttpClient) {
this.httpClient
.post("https://uneven-glowing-scorpion.glitch.me/session", {})
.subscribe(resp => {
console.log(resp);
this.httpClient
.get("https://uneven-glowing-scorpion.glitch.me/resource")
.subscribe(resp => {
console.log(resp);
});
});
}
}
正如您所看到的,服务器可用于测试目的。
http://localhost:4200
和https://uneven-glowing-scorpion.glitch.me
不是同一个域,因此不会发送cookie。就这么简单。没有办法用饼干来解决这个问题。Cookie不能跨域。这就是他们安全的原因
您的HTTP调用与Postman一起工作的原因是,该应用程序在这些情况下非常宽容;浏览器不是。关于这一点有很多问题。我为服务器创建了一个小故障项目:服务器位于:我还创建了一个stackblitz angular应用程序,可在:
http://localhost:4200
和https://uneven-glowing-scorpion.glitch.me
不是同一个域。因此,没有饼干。就这么简单。coolies@R.Richards(此处插入facepalm.gif)无法解决此问题。如果您可以添加此答案并进行解释,我将接受。你知道邮递员在这方面有什么不同吗?我正在和邮递员检查API,它在那里工作没有问题。。。