2013-03-22 108 views
3

迄今爲止,我一直在爲我的Express會話使用默認的MemoryStore。除了所有會話數據在重新啓動之間丟失以外,一切都工作得很好。所以我試圖讓我的會話與Redis & Connect-Redis一起工作。快遞+護照+ Redis會話?

下面是涉及會話配置與Redis的我的代碼的一部分:

var express = require("express"), 
    app = module.exports = express(), 
    passport = require("./passport"), 
    http = require("http"), 
    RedisStore = require("connect-redis")(express), 
    redis = require("redis").createClient(); 

app.configure(function(){ 

    app.set("passport", passport); 
    app.use(express.cookieParser()); 
    app.use(express.session({ 
     secret: "I can haz working sessions?", 
     store: new RedisStore({ client: redis }) 
    })); 
    app.use(passport.initialize()); 
    app.use(passport.session()); 
    ... 

當我運行該應用程序,沒有任何錯誤。但是,當我嘗試登錄時,雖然它執行初始登錄,但我只是不斷彈回到登錄屏幕。就好像護照不能設置cookie,或者在設置cookie後不能讀取cookie。

僅供參考,這裏有我的護照使用序列化的功能/反序列化會話:

passport.serializeUser(function(user, done) { 
    done(null, { 
     id : user.id, 
     type : user.type, 
     firstname: user.firstname, 
     lastname: user.lastname 
    }); 
}); 

passport.deserializeUser(function(user, done) { 
    done(null, user); 
}); 

在哪裏我錯了有什麼建議?是否需要修改護照serializeUser/deserializeUser才能使用redis?還是我錯過了別的?

(提前)感謝您的幫助。

+1

檢查您的瀏覽器的開發工具以查看cookie是否實際設置(並且還通過瀏覽器發送回服務器)。你的代碼看起來沒問題。 – robertklep 2013-03-22 06:30:14

+0

聽起來像我與cookie會話相同的問題:http://stackoverflow.com/questions/19011531/using-cookiesession-with-passport – 2013-09-26 07:36:02

+0

@ user1031947:你能解決你的問題?請更新。 – moaglee 2015-03-16 14:15:05

回答

0

一種可能性:也許你的應用程序無法連接到Redis?我發現當我的redis服務器沒有運行時,我遇到了你描述的症狀(默默無法設置cookie)。

除了檢查它是否正在運行之外,請確保您的節點服務器可以真正連接到它 - 也就是說,沒有防火牆規則可以阻止您。

祝你好運!