【问题标题】:How are connect-mongo MongoStore sessions actually saved?connect-mongo MongoStore 会话实际上是如何保存的?
【发布时间】:2022-03-03 02:50:52
【问题描述】:

我使用 Passport 实现了会话,但为了存储会话,我尝试了 connect-mongo 使用 mongoose 连接。 p>

这是我的代码(会话部分):

var express     =       require('express')
var mongodb     =       require('mongodb')
var mongoose    =       require('mongoose')
var bodyParser  =       require('body-parser')
var cookie      =       require('cookie-parser')
var connect     =       require('connect')
var passport    =       require('passport')
//var flash         =       require('connect-flash')
var session     =       require('express-session');
var MongoStore  =       require('connect-mongo')(session);
var LocalStrategy =     require('passport-local').Strategy;

var app = express()

var BSON = mongodb.BSONPure

app.use(express.static(__dirname+"/public"))
app.use(bodyParser())
app.use(cookie())
app.use(connect.session({ secret: 'ilovescotchscotchyscotchscotch' })); 
app.use(passport.initialize());
app.use(passport.session());

mongoose.connect('mongodb://localhost/psicologosTuxtepecDB')



var Schema = mongoose.Schema
var userCredential = new Schema({

    username:   String,
    password:   String

},  {
    collection:     'members'
})

var userCredentials = mongoose.model('members', userCredential)



app.use(session({
    secret: 'ziKologiia',
    clear_interval: 900,
    cookie: { maxAge: 2 * 60 * 60 * 1000 },
    store: new MongoStore({
      db : mongoose.connection.db
    })
  }));

我怀疑它是否会适得其反的是 app.use(connect.session({ secret: 'ilovescotchscotchyscotchscotch' })) is usingconnect 模块,但 MongoStore 配置是在 express-session 变量上设置的。但是,首先删除会导致应用无法正常运行(不会进行身份验证/重定向)。

那么,关于我的问题标题。 该会话存储在哪里?我真的认为我可以去我的 Mongo 数据库并找到任何存储它的集合

如何在后端 (Mongo) 甚至在应用程序中找到此类会话作为 Java Script 对象?

【问题讨论】:

  • 你的数据库中没有sessions 集合吗?
  • 我没有,不就是默认创建的吗?

标签: node.js mongodb session


【解决方案1】:

connect-mongo 将会话存储在 "sessions" collection by default 中。它们应该在那里并且在 mongo shell 或任何 GUI 工具(如 robomongo)中可见。是的,它是默认创建的。我会传入the mongooose_connection option 而不是db

来自文档:

mongoose_connection 格式为:someMongooseDb.connections[0] 以使用现有的 mongoose 连接。 (可选)

【讨论】:

  • 您能否举例说明您改进我的代码的建议?
  • store: new MongoStore({ mongoose_connection: mongoose.connections[0] })
  • 还有一个与该主题相关的问题,我怎么可能在 app.use(connect.session({ secret: 'ilovescotchscotchyscotchscotch' })); 然后在 MongoStore 配置中有一个 secret: 'ziKologiia',..。我先删了就不行了,这两个秘籍怎么会,兼容
  • MongoStore 不接受 secret 选项,据我所知。 connect.session 完成所有逻辑,mongo 存储只是提供持久存储。
【解决方案2】:

你应该做的一件事是替换

app.use(connect.session({ secret: 'ilovescotchscotchyscotchscotch' }));

和你的

app.use(session({
  secret: 'ziKologiia',
  clear_interval: 900,
  cookie: { maxAge: 2 * 60 * 60 * 1000 },
  store: new MongoStore({
    db: mongoose.connection.db
  });
}));

【讨论】:

  • 如果我替换 app.use(connect.session({ secret: 'ilovescotchscotchyscotchscotch' })); 它会出错。不管理会话重定向。
【解决方案3】:

MongoClient 的更新方法:

import session from "express-session";
import MongoStore from "connect-mongo";

app.use(
    session({
        secret: "Your Key",
        cookie: {
            maxAge: 60000 * 60 * 24, //1Sec * 1H * 24 = 1 Day
            secure:  process.env.NODE_ENV !== "production"? false : true
        },
        resave: true,
        saveUninitialized: true,
      store: MongoStore.create({ mongoUrl: process.env.MongoDBUrl}),
    })
);

【讨论】:

    猜你喜欢
    • 2014-02-24
    • 2018-03-30
    • 2017-04-05
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    相关资源
    最近更新 更多