簡體   English   中英

Express + Passport + Redis會議?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM