【发布时间】:2020-09-14 19:25:03
【问题描述】:
我正在使用 MERN 堆栈进行编程,但在使用 express-session 时遇到了障碍。当我的前端localhost:3000 命中我的后端localhost:8080 中的端点时,我似乎无法设置cookie。当我在localhost:8080 并且我在后端localhost:8080 中访问我的端点时,Cookie 设置得非常好。我该如何解决这个问题?我希望能够在注册用户时设置 httpOnly cookie 或在登录时重新生成 cookie 或在注销时销毁会话。等等...我不确定这是否是我正在处理的 cors 问题。顺便说明一下,这些 cookie 正在设置,因为我已经对其进行了测试。问题是我无法看到从我的前端设置的 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}`));
【问题讨论】:
标签: javascript node.js mongodb express express-session