我有一个用 node.js 编写的服务器。它使用护照登录用户。我也在使用 express.cookieSession。
我有几个客户端,每个都有自己的文件夹(假设为每个客户端提供我的应用程序的几个副本)。我的应用程序的每个副本都将像这样访问:
www.mysite.com/client1/... www.mysite.com/client2/...
这是我的服务器代码:
app.configure(function() {
app.use(express.compress());
app.use(express.logger({format: 'dev'}));
app.use(basic.middleware);
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.static(path.join(__dirname, 'app'), { maxAge: oneYear}));
app.use(express.cookieSession(
{
secret: process.env.COOKIE_SECRET || "cantbedecrypted",
cookie: { maxAge: 1000*60*60 }
}));
});
我的目标是,根据这个“client1”或“client2”,我想保存一个会话 cookie,以便当我执行 req.log 时它会填充那个特定的 cookie。
我已经在 req.login 函数上做到了这一点,但问题是每次用户进入站点时,它首先在路径“/”处创建一个会话 cookie,然后在用户登录后创建另一个会话 cookie,但这次是在所需路径:'/client1/.
这是登录时保存会话 cookie 的代码:
req.session.cookie.path = '/' + clientName;
问题是当我执行 req.logout() 时,正在销毁的会话 cookie 位于默认路径:'/',因此用户保持登录状态。
是否可以在创建初始会话 cookie 之前插入一些将检查 req.url 的中间件,以便它只保存在“/client1/”而不是默认的“/”上?
我只需要一个骨架。我试过这样的东西,就在 app.use express.cookieSession 之后
app.use(function (req, res, next) {
check url...
req.session.cookie.path = **desired path
}
但这没有用。
有没有办法可以在 express.cookieSession 中使用一些参数或全局变量?这可以解决我的问题。