2015-04-13 3 views
0

Я использую passport.js + express.js + mongodb, я думаю, что это очень спускный способ реализации аутентификации сервера, однако я нашел немного странным.expressjs паспорт mongodb сеанс не найден

Для настройки хранения сессий:

// CookieParser should be above session 
    app.use(cookieParser()); 
    app.use(cookieSession({ secret: 'secret' })); 
    app.use(session({ 
    resave: true, 
    saveUninitialized: true, 
    secret: pkg.name, 
    store: new mongoStore({ 
     url: config.db  
    }) 
    })); 

    // use passport session 
    app.use(passport.initialize()); 
    app.use(passport.session()); 

Затем, когда я войти, я просматриваю MongoDB, но не находят sessions коллекции.

Кто-нибудь знает почему?

Спасибо.

+0

Невозможно ответить, не видя, как вам требуется «mongoStore» и вывод 'config.db'. – olan

ответ

1

Возможно, я ошибаюсь, но, насколько я понимаю, сеанс пользователя, созданный паспортом js, не хранится в db. Когда начнется сеанс, он перейдет на ваш дБ и захватит информацию о пользователе. Если информация пользователя существует, она присоединяет сеанс к req.user. Ни в коем случае он фактически не сохраняет сессию в db, если вы не добавите пользовательскую функцию для сохранения информации о сеансе после того, как сеанс инициализирован. Возможно, this article поможет вам понять немного больше, что происходит. Если вы хотите сохранить информацию о сеансе, возможно, создайте модель, которая примет информацию, хранящуюся в req.user, и сохранит ее после начала сеанса.

+0

Огромное спасибо, я выясню это сразу после публикации этого вопроса, но мне интересно, когда паспорт загружает db, будет стоимость. Мне интересно, может ли он использовать слишком много ресурсов? – iceNuts

+0

pt1 - Я не верю, что вокруг есть способ. Если вы не храните информацию о пользователе в плоском файле, размещенном в вашем приложении (не рекомендуется), ему необходимо получить доступ к db, чтобы убедиться, что они являются пользователем. – tilted

+0

pt2 - Возможно, ваш сервер вытащил всех пользователей из db и просто сохранил их в списке, а затем сканировал db для нового пользователя, чтобы добавить его в список, когда новый пользователь создан для обновления списка, в котором находятся пользователи, которые это просто нужно будет прикоснуться к db, как только будет создан новый пользователь, а не когда пользователи войдут в систему. Он будет проверять список пользователей, который у него уже есть в памяти. – tilted

1

Вы используете модуль cookie-session и модуль express-sesion. Эти два посредника сражаются друг с другом. Оба модуля выполняют сеансы, и вам нужно использовать только один из них. cookie-session сеансы хранителей в файлах cookie, а в вашем случае express-session сохранит ваши сеансы в Mongo. Какой вариант вы выбираете, зависит от ваших требований приложения.

Детали вокруг вопроса в том, что, так как его первый в стек промежуточного программного обеспечения, cookie-session создает req.session свойство. Затем код express-session видит, что это свойство уже существует и решает ничего не делать. Вот почему Монго не показывает сеансы.

Смежные вопросы