【问题标题】:Express + Passport + Redis sessions?Express + Passport + Redis 会话?
【发布时间】:2013-03-11 21:27:43
【问题描述】:

迄今为止,我一直在为我的 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() );
    ...

当我运行这个应用程序时,没有错误。但是,当我尝试登录时,虽然它执行了初始登录,但我只是不断地跳回登录屏幕。就好像passport无法设置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 一起使用?还是我错过了什么?

感谢(提前)您的帮助。

【问题讨论】:

  • 检查浏览器的开发工具,看看是否真的设置了 cookie(并且浏览器也将其发送回服务器)。您的代码似乎没问题。
  • 听起来和我在 cookie 会话中遇到的问题一样:stackoverflow.com/questions/19011531/…
  • @user1031947:你能解决你的问题吗?请更新。

标签: javascript node.js redis connect passport.js


【解决方案1】:

一种可能性:也许您的应用无法连接到 Redis?我发现当我的redis-server没有运行时,我遇到了你描述的症状(静默设置cookie失败)。

除了检查它是否正在运行之外,还要确保您的 Node 服务器可以真正连接到它——也就是说,没有防火墙规则将您拒之门外。

祝你好运!

【讨论】:

    猜你喜欢
    • 2019-03-20
    • 2014-03-28
    • 2013-12-13
    • 2020-07-02
    • 2014-09-14
    • 2017-10-09
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多