2017-02-20 51 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, 
})); 

storeMongoStore線的那一刻註釋掉....讓他們在作如下發生(變化我刷新頁面):

  • 服務器掛起,不響應
  • 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輸出任何東西,這也讓我感到困惑。不過,我本地策略結束時的策略確實奏效。

我已經研究了一些Mongoose,寧願不要在這一點上使用它 - 我在掙扎MongoDB的概念,而沒有在混合中添加其他東西。任何洞察力將不勝感激。

回答

0

看起來像快速會話中的用戶序列化在沒有模型的情況下不起作用。我結束了使用貓鼬。