我遇到會話問題,其中會話變量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