为什么req.session不会与node.js一起设置

时间:2013-03-29 10:05:36

标签: javascript node.js oauth express

我似乎无法为

设置任何内容
req.session

我正在尝试将oauth令牌和秘密存储到会话中,以便我可以在授权回调后检查它们。这是我的代码

var express = require('express'),
    app     = express(),
    server  = require('http').createServer(app),
    io      = require('socket.io').listen(server),
    oauth   = require('oauth'),
    tumblr  = require('tumblr.js'),
    client  = {
        consumer_key: '1n9fMPxCBFBbcIGRImYKSK5wwDL6yux64S4DxEwiwzHTNuaIoD',
        consumer_secret: 'bW9YKbnwgxexyVx1AaxQr1QoemEkjd29p5U1WpbZ8r1XEH41C0'
    },
    consumer = new oauth.OAuth(
        "http://www.tumblr.com/oauth/request_token", "http://www.tumblr.com/oauth/access_token",
        client.consumer_key, client.consumer_secret, "1.0A", "http://127.0.0.1:8080/sessions/callback", "HMAC-SHA1");

server.listen(1337);

app.configure('dev', function(){
    app.use(express.logger());
    app.use(express.bodyParser());
    app.use(express.cookieParser());
    app.use(express.session({ secret: "topsecret" }));
});


app.get('/home', function(req, res){
    consumer.getOAuthRequestToken(function(err, oauth_token, oauth_token_secret, results){
        if(err){
            console.log(err);
        }else{
            //req.session.oauth.token = oauth_token;
            console.log('oauth.token: ' + oauth_token);
            //req.session.oauth.token_secret = oauth_token_secret;
            console.log('oauth.token_secret: ' + oauth_token_secret);
            res.redirect('http://www.tumblr.com/oauth/authorize?oauth_token='+oauth_token);
        }
    });
});

app.get('/oauth/testapp', function(req, res){
    res.send('callback');
});

当我取消注释时

req.session.oauth.token = oauth_token;

我收到错误“无法读取未定义的属性'oauth'”req.session在控制台中显示未定义。

2 个答案:

答案 0 :(得分:2)

您正尝试在会话中的对象token上设置属性oauth。如果oauth对象未初始化,则为undefined,您无法设置token属性。首先需要在会话中初始化oauth对象。你可以做一下

req.session.oauth = {token: theToken}

这将在会话中创建一个对象,并设置该对象的token属性。

@robertklep找到解决方案的另一半:确保您使用正确的环境运行。由于您在dev中使用了app.configure,因此必须使用NODE_ENV=dev运行节点才能应用配置。

答案 1 :(得分:2)

var app = express();
app.configure('dev', function() {
    app.use(express.logger());
    app.use(express.bodyParser());
    app.use(express.cookieParser());
    app.use(express.session({ secret: "topsecret" }));
    app.use(app.router); // You need to add the router after the express.session
});

希望这可以帮到你