Я пытаюсь настроить свою первую систему аутентификации Mongo, и она идет довольно хорошо вплоть до момента, когда я пытаюсь создать сеанс для пользователь с экспресс-сессиями.Проблема с установкой MongoDB/Monk/Express-Sessions («не может сериализовать пользователя»)
Мои пользовательские маршруты в порядке - я могу зарегистрироваться и войти в систему, и это отражено в базе данных, но как только я дойду до этапа создания сеанса, я получаю ошибку «Не удалось выполнить сериализацию пользователя в сеансе».
Я подозреваю, что ошибка в том, как я настроил мои сессии:
//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: '$2a$10$i6sip04Jw6ylk83aOfnXIui7dszBIbe0OEdLSNVsRHQe8Xquy1r7O',
email: '[email protected]',
district: 'New York 5th' }
got it
POST /auth/login 500 115.327 ms - 1003
И вот что мои сериализации/десериализации методы выглядеть следующим образом:
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);});
});
};
Ни один из console.logs здесь не выводит ничего, что тоже меня озадачивает. Тем не менее, в конце моей локальной стратегии все же работает.
Я изучил некоторые монголы и не буду использовать их в этой точке. Я достаточно боюсь с концепцией MongoDB, не добавляя в микс другую вещь. Любое понимание было бы оценено.