我遇到会话问题,其中会话变量I 只是集合 未定义在下一个页面请求上。我通常必须再次通过流程 才能正确设置变量。Node.js&Express会话问题
我可以确认我没有试图将会话变量设置为undefined;他们有合法的价值。
在我的应用中,用户从/ twitter/connect /移动到/ twitter/callback /。前者从twitter中获取一些oauth数据,后者将用户记录到twitter中。
/叽叽喳喳/连接/很简单:
app.get('/twitter/connect/?', function(req, res){
consumer().getOAuthRequestToken(function(error, oauthToken, oauthTokenSecret, results){
if (error){
// error handling here
} else {
req.session.oauthRequestToken = oauthToken;
req.session.oauthRequestTokenSecret = oauthTokenSecret;
// if I console.log the two session variables above
// they have the proper values.
res.redirect("https://twitter.com/oauth/authorize?oauth_token="+req.session.oauthRequestToken);
}
});
});
之后,微博送他们回/叽叽喳喳/回调/:
app.get('/twitter/callback/?', function(req, res){
console.log(req.session.oauthRequestToken);
console.log(req.session.oauthRequestTokenSecret);
// more often than not, the two variables above are
// undefined. but not always. usually on the first
// pass, never on the second.
});
我不知道发生了什么事情,我可以确认会话变量设置正确,它们只是不会在页面请求之间保持它们的值,而只是第一次。
这是我如何创建我的服务器:
app.configure('development', function(){
app.use(express.cookieParser());
app.use(express.session({ secret:'yodawgyo' }));
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
app.use(express.logger());
app.use(express.static(__dirname + '/public'));
app.set('view engine', 'ejs');
app.set('view options', {
open: '{{',
close: '}}'
});
});
我只是有一个开发环境现在。我已经安装了Node 0.5.0,但也在0.4.1上看到了这个问题。我使用快车2.3.2。
任何帮助,非常感谢。
我有调用API的完全相同的问题。我很确定会话信息在重定向时正在丢失。也就是说,如果我在浏览器中刷新页面,我可以看到我在会话中放置的内容仍然存在。但是,如果我通过某个外部站点(例如oauth提供程序)的重定向到达*相同页面*,则该会话是完全空白的。不知道问题是什么。 – 2011-06-08 20:57:52
更新:看起来像您为重定向的请求获得了不同的会话ID。 – 2011-06-08 21:34:53