MongoDB / Monk / Express-Sessions 设置有问题 ("cannot serialize user")
Trouble with MongoDB / Monk / Express-Sessions setup ("cannot serialize user")
我正在尝试设置我的第一个 Mongo 身份验证系统,在我尝试使用 express-sessions 为用户创建会话之前,它一直运行良好。
我的用户路由很好——我可以注册和登录,它反映在数据库中——但是一旦我进入创建会话的步骤,我就得到 "Failed to serialize user into session" 错误。
我怀疑我设置会话的方式有问题:
//var MongoStore = require('connect-mongostore')(session);
app.use(session({
//store: new MongoStore({ db: 'callcongress', url: 'mongodb://localhost:27017/callcongress', collections: ['usercollection', 'sessions']}),
secret: process.env.SECRET_KEY,
resave: false,
saveUninitialized: true,
}));
store
和 MongoStore
行目前被注释掉了....将它们加入会导致以下情况发生(刷新页面时发生变化):
- 服务器挂起并且没有响应
Error getting collection: sessions <Error: Error setting TTL index on collection : sessions <Error: Error setting TTL index on collection : sessions <Error: Cannot determine state of server>>>
Cannot determine state of server
(我试着查找这个错误,但所有其他问题都是关于 heroku 部署的?)
我尝试了 MongoStore
和一组不同的选项,所有选项都有相同的结果。
这是我登录时终端中发生的情况(console.logs 的控制台结果):
{ _id: 58ab42c1f0a05388ce3b2348,
username: 'test16',
name: 'test',
password: 'a$i6sip04Jw6ylk83aOfnXIui7dszBIbe0OEdLSNVsRHQe8Xquy1r7O',
email: 'test@test.com',
district: 'New York 5th' }
got it
POST /auth/login 500 115.327 ms - 1003
下面是我的 serialize/deserialize 方法:
const passport = require('passport');
var mongo = require('mongodb');
var monk = require('monk');
var db = monk('localhost:27017/callcongress');
const userCollection = db.get('usercollection');
module.exports = () => {
var user_cache = {};
passport.serializeUser(function(user, next) {
console.log('in serialize');
let id = user._id;
user_cache[id] = user;
done(null, id);
});
passport.deserializeUser((id, done) => {
console.log('in deserialize 1');
userCollection.findById(id)
.then((user) => {done(null, user_cache[id]);})
.catch((err) => {done(err, null);});
});
};
None of the console.logs in here output anything,这也让我有点困惑。不过,我本地策略末尾的那个确实有效。
我研究了 Mongoose 一些但现在不想使用它 -- 我正在努力研究 MongoDB 的概念,而没有在混合中添加其他东西.任何见解将不胜感激。
在没有模型的情况下,快速会话中的用户序列化似乎无法工作。我最终使用了 Mongoose。
我正在尝试设置我的第一个 Mongo 身份验证系统,在我尝试使用 express-sessions 为用户创建会话之前,它一直运行良好。
我的用户路由很好——我可以注册和登录,它反映在数据库中——但是一旦我进入创建会话的步骤,我就得到 "Failed to serialize user into session" 错误。
我怀疑我设置会话的方式有问题:
//var MongoStore = require('connect-mongostore')(session);
app.use(session({
//store: new MongoStore({ db: 'callcongress', url: 'mongodb://localhost:27017/callcongress', collections: ['usercollection', 'sessions']}),
secret: process.env.SECRET_KEY,
resave: false,
saveUninitialized: true,
}));
store
和 MongoStore
行目前被注释掉了....将它们加入会导致以下情况发生(刷新页面时发生变化):
- 服务器挂起并且没有响应
Error getting collection: sessions <Error: Error setting TTL index on collection : sessions <Error: Error setting TTL index on collection : sessions <Error: Cannot determine state of server>>>
Cannot determine state of server
(我试着查找这个错误,但所有其他问题都是关于 heroku 部署的?)
我尝试了 MongoStore
和一组不同的选项,所有选项都有相同的结果。
这是我登录时终端中发生的情况(console.logs 的控制台结果):
{ _id: 58ab42c1f0a05388ce3b2348,
username: 'test16',
name: 'test',
password: 'a$i6sip04Jw6ylk83aOfnXIui7dszBIbe0OEdLSNVsRHQe8Xquy1r7O',
email: 'test@test.com',
district: 'New York 5th' }
got it
POST /auth/login 500 115.327 ms - 1003
下面是我的 serialize/deserialize 方法:
const passport = require('passport');
var mongo = require('mongodb');
var monk = require('monk');
var db = monk('localhost:27017/callcongress');
const userCollection = db.get('usercollection');
module.exports = () => {
var user_cache = {};
passport.serializeUser(function(user, next) {
console.log('in serialize');
let id = user._id;
user_cache[id] = user;
done(null, id);
});
passport.deserializeUser((id, done) => {
console.log('in deserialize 1');
userCollection.findById(id)
.then((user) => {done(null, user_cache[id]);})
.catch((err) => {done(err, null);});
});
};
None of the console.logs in here output anything,这也让我有点困惑。不过,我本地策略末尾的那个确实有效。
我研究了 Mongoose 一些但现在不想使用它 -- 我正在努力研究 MongoDB 的概念,而没有在混合中添加其他东西.任何见解将不胜感激。
在没有模型的情况下,快速会话中的用户序列化似乎无法工作。我最终使用了 Mongoose。