【问题标题】:How to set express.cookieSession to a path according to the incoming req.url如何根据传入的 req.url 将 express.cookieSession 设置为路径
【发布时间】:2013-11-02 08:52:06
【问题描述】:

我有一个用 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 中使用一些参数或全局变量?这可以解决我的问题。

【问题讨论】:

  • 你在哪里调用 req.logout?调用 req.logout 的 url 还必须为所有可能的路径重置 cookie。
  • 我怎样才能告诉这个req url删除一个特定的cookie? req.logout 在用于注销的 api 路由上完成。非常直接。我如何告诉 req.logout 也清除所有其他未在默认路径上设置的 cookie?

标签: javascript node.js cookies express connect


【解决方案1】:

我认为您混淆了reqres。您不修改 req 以发送/设置 cookie,而是更改 res。要重置 cookie,请使用 clearCookie。你可以用它给出路径:

res.clearCookie('name', { path: '/admin' });

【讨论】:

    猜你喜欢
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 2015-03-21
    • 2022-12-13
    • 2016-05-12
    相关资源
    最近更新 更多