使用 express-session 和 passportjs 在创建会话时自动存储值

Automatically store value upon session creation using express-session and passportjs

提问人:Bram Vanbilsen 提问时间:11/14/2023 更新时间:11/14/2023 访问量:17

问:

我正在尝试在创建之前保存向我的会话对象添加令牌。我能够按如下方式执行此操作,因为在调用时会创建令牌:req.logIn

    req.logIn(user, (err) => {
        if (err) return res.error(401);
        req.session.extraToken = generateExtraToken();
        return res.success({ redirectPath: "/", uid: user.id });
    });

这有效,被存储。但我在代码库中又使用了几次。将来,可能会添加更多此类调用。所以我正在寻找一种方法来自动添加此字段,而无需每次使用 .extraTokenreq.logInextraTokenreq.logIn

这可能吗?它应该只在生成新会话时发生,而不是在更新现有会话时发生。

作为当前的解决方法,我执行以下操作来改进 DX:

function handleLoginAndCreateSessionCreation(req: Request, res: Response, user: Creds, opt?: { redirectPath?: string }) {
    req.logIn(user, (err) => {
        if (err) return res.error(401);
        req.session.extraToken = generateExtraToken();
        return res.success({ redirectPath: opt?.redirectPath || "/", uid: user.id });
    });
}

这很有帮助,但仍然不是我所追求的,因为开发人员可能会忘记使用它。

我的会话中间件设置如下:

    const sessionParser = session({
        secret: "my secret",
        resave: false,
        cookie: { httpOnly: true, secure: true, sameSite: "strict" },
        saveUninitialized: false,
        proxy: true,
        store: createSessionStoreConnection(dbClient),
    });

我正在为商店使用 connect-mongo。我真的不希望不必编写自己的商店实现,因为已经过彻底测试。connect-mongo

node.js passport.js Express-session

评论


答: 暂无答案