Express.js +谷歌浏览器扩展:是否可以进行会话存储?

时间:2012-02-28 13:16:09

标签: google-chrome-extension express

我正在使用带有弹出窗口的Google Chrome扩展程序,我在其中从node.js + express.js服务器加载页面。我加载的页面会以这种方式根据req.session.user的状态而变化:

app.get('/', function(req, res){
    if(req.session.user){
        res.render(__dirname + '/pages/base.jade', {});
    }
    else{
        res.render(__dirname + '/pages/login_register.jade', {});
    }
});

如果req.session.user为空,我发送一个页面,用户可以在其中进行登录或注册。如果他/她登录,这就是服务器中发生的情况:

app.post('/login', function(req, res){
    var user = {};
    user.username = req.body.username;
    user.password = req.body.password;
    checkLogin(user, function(foundUser){
        //login correct
        console.log("login!");
        req.session.user = foundUser;
        res.render(__dirname + '/pages/base.jade', {
        });
    });
});

因此,如果用户正确登录req.session.user,则应使用当前用户的凭据进行设置。问题是,一旦我登录然后关闭Chrome扩展程序的弹出窗口,每当我重新打开它时,我仍会收到登录页面。

我的问题是:popup是否支持express.js服务器中的会话存储?如果是,那么我的代码有问题,任何人都可以指出我做错了什么?感谢。

编辑:

这就是我设置服务器的方式:

var app = express.createServer(
    express.logger(),
    express.cookieParser(),
    express.session({ secret: 'keyboard cat' })
);

app.use(express.cookieParser());
app.use(express.session({ secret: "keyboard cat" }));
app.set('view engine', 'ejs');
app.set("view options", { layout: true });

我可能会在这里做一些多余的事情,因为我仍然没有深入了解它是如何工作的。

2 个答案:

答案 0 :(得分:2)

问题是您如何设置服务器 - 您使用cookieParsersession中间件两次:

var app = express.createServer(
    express.logger(),
    express.cookieParser(),
    express.session({ secret: 'keyboard cat' })
);

app.use(express.cookieParser());
app.use(express.session({ secret: "keyboard cat" }));

您应该只使用 中间件作为createServer use的参数,所以:

var app = express.createServer();

app.use(express.logger());
app.use(express.cookieParser());
app.use(express.session({ secret: "keyboard cat" }));

答案 1 :(得分:0)

弹出页面可能会在每次打开时重新加载。您应该为扩展程序创建一个后台页面,您可以在其中存储/管理会话。然后,您可以从弹出窗口传递给后台传递消息docs。使用消息传递,您可以将登录数据发送到后台页面,并询问用户是否已登录。