2017-02-20 21 views
0

Я пытаюсь настроить свою первую систему аутентификации 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, не добавляя в микс другую вещь. Любое понимание было бы оценено.

ответ

0

Похоже, сериализация пользователей в экспресс-сессиях не работает без модели. Я закончил тем, что использовал Мангуста.