[英]Express + Passport + Redis sessions?
到目前為止,我一直在為Express會話使用默認的MemoryStore。 除了在重新啟動之間丟失所有會話數據之外,一切都運行良好。 所以我試圖讓我的會話與Redis和Connect-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? 還是我錯過了別的什么?
在此先感謝您的幫助。
一種可能性:也許你的應用無法連接到Redis? 我發現當我的redis-server沒有運行時,我遇到了你描述的症狀(默默無法設置cookie)。
除了檢查它是否正在運行之外,請確保您的節點服務器可以實際連接到它 - 也就是說,沒有防火牆規則阻止您。
祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.