NodeJS Redis会话不会保留在浏览器重定向上

时间:2014-11-29 20:52:18

标签: javascript node.js session redis session-cookies

我对节点还很陌生,正在尝试使用express + redis进行会话管理。

我当前的项目要求将用户重定向到外部站点进行身份验证。身份验证后,浏览器将重定向到我指定的回调网址。我要求会话数据在重定向中保持不变。

我的实施如下:

  1. 用户触发对nodeJS服务器的POST调用,我在req.session.foo = 'bar'将数据保存到会话中,然后将auth_url返回给浏览器。
  2. 浏览器使用window.location.replace(auth_url);重定向到外部网站进行身份验证
  3. 经过身份验证后,浏览器会重定向到localhost:3000/mycallbackurl,这是下面定义的路由(原谅糟糕的格式化):
  4.   

    router.get('/ mycallback',function(req,res){

      console.log("data at callback: " + req.session.foo);
      //do other stuff
    
         

    });

    我现在的问题是控制台在回调路径上打印:data at callback: undefined

    这是我的redis设置的问题,还是我在这里遗漏了一些东西?

    到目前为止,我已经确定redis正在通过在每次浏览器刷新时增加存储在req.session中的值并打印它来工作。

    我的redis设置如下:

    var session = require('express-session');
    var RedisStore = require('connect-redis')(session);
    app.use(cookieParser());
    app.use(session({ store: new RedisStore({
        host: 'localhost',
        port: 6379,
        db: 1,
        cookie: { maxAge: (24*3600*1000*30)},
    }), secret: 'keyboard cat',
        saveUninitialized: true,
        resave: true
    }));
    

    感谢阅读并期待您的回复!

1 个答案:

答案 0 :(得分:0)

重定向(res.redirect)后,将重新创建res和req对象。这意味着如果您向这些对象添加了任何参数,则需要确保在每个请求中将它们重新添加到req或res对象。