javascript - express-session 不会删除 mongodb 中的会话
问题描述
account.js(node.js 部分)
const express = require("express");
const router = express.Router();
router.post("/logout", (req, res) => {
console.log("session: ", req.session);
req.session.destroy();
console.log("session: ", req.session);
res.send(true);
})
会话:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1ZTZjZjJinDY1N2Q3MjQzNzQxMzFjODkiLCJpYXQiOjE1ODQ3MDM3MDF9.A8-gorvV3SI7boHGbtiRh6NXHbnYIR1VnsAzNWwwMTw
会话:
目的:用户登录过程成功。如果登录成功,则将信息保存到 mongodb 字段中。
问题:当我写下面这行代码时,通常需要删除它。但无论我做什么,它都不会删除。您可以通过检查 console.log 部分来理解这一点。
如果你想复习,我在下面的 index.js 中添加了一些代码。
...
const dotenv = require("dotenv");
const session = require("express-session");
const MongodDBStore = require("connect-mongodb-session")(session);
app.use(cors({ origin: "*" }));
app.set("trust proxy", 1);
const mongoURL = process.env.DB_CONNECT;
var db = mongoose.connection;
db.on("error", console.error.bind(console, "connection error:"));
db.once("open", function() {});
const store = new MongodDBStore({
uri: process.env.DB_CONNECT,
collection: "sessions"
});
app.use(
session({
secret: process.env.TOKEN_SECRET,
store: store,
resave: false,
saveUninitialized: false,
cookie: {
maxAge: 600000,
sameSite: "strict",
secure: false,
httpOnly: true
}
})
);
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use((req, res, next) => {
res.setHeader("Set-Cookie", "HttpOnly=true;Secure=true;SameSite=None");
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept"
);
res.setHeader("Cache-Control", "private");
res.setHeader(
"Access-Control-Allow-Methods",
"GET, PATCH, POST, DELETE , PUT, OPTIONS"
);
next();
});
mongoose.connect(mongoURL, { useNewUrlParser: true, useUnifiedTopology: true });
const server = http.createServer(app);
server.listen(3000);
这种删除不会导致。我该如何解决?
解决方案
安装cookie-parser
模块并将其导入index.js
文件
const cookieParser = require('cookie-parser');
并设置middleware
app.use(cookieParser('secret'));
//Middleware for session
app.use(session({
secret: process.env.TOKEN_SECRET,
maxAge: 60000 , // 1min = 60000ms
resave: true,
saveUninitialized: true
}));
推荐阅读
- swiftui - 为什么嵌入到 SwiftUI 表单中的按钮不起作用?
- c - 如何在没有 strlen()、sizeof(arr) / sizeof(arr[0]) 的情况下获取这个数组的长度;不行,C语言
- python - TypeError:“模块”对象在使用 selenium webdriver 打开 chrome 浏览器时不可调用
- javascript - Eslint:警告文件默认被忽略。使用否定忽略模式
- java - 设置 Autocompleteplace setupAutocompleteTextView
- checkbox - 如果在 Google 表格中选中复选框,则有条件地格式化具有匹配文本的单元格
- android - 在 EditText 中从 Firebase 检索和显示数据并编辑内容并再次保存
- android - 函数 video.start() 和 video.setVideoPath(url) 中的 android 错误
- jsf - 简单的 jsf 命令按钮适用于除主页之外的每个页面
- python - 使用 numpy 数组语法识别并跳过空栅格的 Python 代码失败