У меня проблема с сеансами, где иногда переменная сеанса, которую я только что установил undefined в запросе следующей страницы. Мне обычно приходится проходить через поток снова, чтобы правильно установить переменные.
Я могу подтвердить, что я не пытаюсь установить переменные сеанса на undefined; они имеют законное значение.
В моем приложении пользователи переходят из /twitter/connect/to/twitter/callback/. Первый извлекает некоторые данные oauth из twitter, последний регистрирует пользователя в твиттере.
/twitter/connect/просто:
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);
}
});
});
После этого твиттер отправляет их обратно в /twitter/callback/:
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: '}}'
});
});
На данный момент у меня только среда dev. У меня есть Node 0.5.0-pre, но эта проблема также появилась на 0.4.1. Я использую express 2.3.2.
Любая помощь очень ценится.