我正在使用MERN堆栈进行编程,当使用express-session时,我遇到了一堵墙。当我的前台使用Express-session时,我似乎无法设置cookie。localhost:3000
在我的后台打端点 localhost:8080
. 饼干设置完全正常,当我在 localhost:8080
我在我的后台打了我的端点。localhost:8080
. 如何解决这个问题?我希望react能够设置 httpOnly
当我注册我的用户或当我登录时重新生成cookie或当我注销时销毁会话等等......。我不太确定这是否是我处理的Cors问题。问题是我无法从我的前端看到这些cookie被设置。
const express = require('express');
const path = require('path');
const mongoose = require('mongoose');
const session = require('express-session')
const cors = require('cors')
const MongoStore = require("connect-mongo")(session)
const PORT = process.env.PORT || 8080;
const config = require('config')
const server = express();
server.set('trust proxy', 1);
server.use(express.json());
server.use(express.urlencoded({ extended: true }))
server.use(cors({
origin: "http://localhost:3000",
optionsSuccessStatus: 200,
credentials: true
}))
server.use((req, res, next) => {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Content-Type, Accept, Authorization, Set-Cookie");
res.header("Access-Control-Allow-Methods", "POST, GET, HEAD, DELETE, PUT, OPTIONS");
res.header("Access-Control-Allow-Credentials", "true")
if ('OPTIONS' == req.method) {
res.sendStatus(200);
}
else {
next();
}
});
mongoose.connect(process.env.MONGODB_URI || config.get("mongo_db_key"),
{
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
useFindAndModify: false
})
.then(() => console.log("MongoDB Connected"))
.catch((err) => console.log(err))
server.use(session({
secret: 'keyboard cat',
resave: false ,
saveUninitialized: false,
cookie: {
secure: false,
maxAge: 1000 * 60 * 60 * 24,
},
store: new MongoStore({
mongooseConnection: mongoose.connection
})
}))
const auth = require('./routes/API/auth');
server.use('/account', auth);
server.listen(PORT, () => console.log(`listening on port: ${PORT}`));
你不能跨域设置cookie(包括协议、域和端口),例外的是你可以为子域共享的上级域设置cookie(例如,你可以为子域设置cookie) Domain=mozilla.org
然后 developer.mozilla.org
将获得cookie).当涉及到维持用户会话的cookie时,它们几乎总是由服务器而不是客户端设置的(客户端访问会话cookie应该受到限制,以保证安全)。 当涉及到维护用户会话的cookie时,它们几乎总是由服务器而不是客户端设置的(出于安全考虑,客户端对会话cookie的访问应该受到限制)。
在最基本的模式中,你只会有一个单一的后端服务器,它将为你的react应用服务,同时为了简单起见也提供后端。