我对节点还很陌生,正在尝试使用express + redis进行会话管理。
我当前的项目要求将用户重定向到外部站点进行身份验证。身份验证后,浏览器将重定向到我指定的回调网址。我要求会话数据在重定向中保持不变。
我的实施如下:
req.session.foo = 'bar'
将数据保存到会话中,然后将auth_url返回给浏览器。window.location.replace(auth_url);
重定向到外部网站进行身份验证localhost:3000/mycallbackurl
,这是下面定义的路由(原谅糟糕的格式化):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
}));
感谢阅读并期待您的回复!
答案 0 :(得分:0)
重定向(res.redirect)后,将重新创建res和req对象。这意味着如果您向这些对象添加了任何参数,则需要确保在每个请求中将它们重新添加到req或res对象。