Google chrome extension Express.js+;Google Chrome扩展:会话存储可能吗?

Google chrome extension Express.js+;Google Chrome扩展:会话存储可能吗?,google-chrome-extension,express,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(

我正在开发一个带有弹出窗口的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', {
        });
    });
});
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 });
因此,如果用户正确登录
req.session.user
,则应使用当前用户的凭据设置该用户。问题是,一旦我登录并关闭Chrome扩展的弹出窗口,每当我重新打开它时,我仍然会收到登录页面

我的问题是:弹出窗口是否支持express.js服务器中的会话存储?如果是,那么我的代码有问题,有人能指出我做错了什么吗?谢谢

编辑:

以下是我设置服务器的方式:

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', {
        });
    });
});
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 });

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

弹出页面可能会在每次打开时重新加载。你应该为你的扩展创建一个背景页面,在那里你可以存储/管理会话。然后你可以在弹出窗口和背景页面之间传递信息。使用消息传递,您可以将登录数据发送到backgroundpage,还可以询问用户是否已登录。

问题在于您如何设置服务器-您正在使用
cookieParser
会话
中间件两次:

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
的参数,或者
使用
,因此:

var app = express.createServer();

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

我在前面的扩展中使用了它,我在问题中的意思是,服务器是否存储由弹出页面发送的会话。理想情况下,如果您正在浏览某个页面并登录,那么如果您重新加载该页面,您仍然应该登录,对吗?此外,我只是尝试通过浏览器而不是通过扩展来浏览这些页面(在lol之前没有考虑到这一点),并且它似乎没有将会话存储在服务器中。问题就在这里,扩展我想这不是问题。你如何识别经过身份验证的用户?如果您正在使用cookies,请检查它们在弹出窗口重新打开后是否仍然存在。如果您使用的是套接字,那么我认为当用户关闭弹出窗口时,套接字将关闭。用户将在服务器端使用
req.session.user
进行身份验证,这是在用户正确登录时设置的。据我所知,它应该记住每个登录用户的当前用户会话,但它似乎不起作用……Express(实际上,connect)会话是基于cookie的。你的应用程序是如何设置的?您是否
使用(express.cookieParser())
使用(express.session())
?检查您的cookies是否正常工作。也许cookies在扩展中的处理方式有所不同。我用服务器设置编辑了这篇文章。如您所见,我使用了
express.session()
express.cookieParser()
。好的,这绝对是多余的。我总是在不带参数的情况下使用
express.createServer()
,然后使用
。使用
所有的中间件等。试试看它是否能解决问题!成功了!奇怪的是,如果你做了多余的事情,它就会停止工作!他们应该检查你是如何设置的,或者类似的事情。无论如何,非常感谢!:)