【问题标题】:express-session does not delete session in mongodbexpress-session 不会删除 mongodb 中的会话
【发布时间】:2020-03-22 10:20:19
【问题描述】:

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);

此删除不会导致。我该如何解决?

【问题讨论】:

    标签: javascript node.js mongodb express session


    【解决方案1】:

    安装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
    
    }));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-30
      • 2018-10-10
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 2019-03-25
      • 2021-01-11
      • 2015-08-03
      相关资源
      最近更新 更多