使用 NestJS 和 Passport 手动启动登录会话

Manually initiate login session using NestJS and Passport

我正在寻找一种以编程方式登录假用户以用于开发目的的方法。最终目标是我出于 demo/development 目的打开应用程序并且有一个假用户强行登录(这在生产中被关闭)

目前我有3套中间件运行:

  1. express-session - 设置会话和会话存储提供程序
  2. 我写的一些自定义中间件只是将我的开发用户附加到 req.session.user
  3. passport-saml 检查用户是否通过身份验证的中间件,如果没有,则将其踢给 SSO 提供商。

现在,我可以在 1 和 3 之间添加更多的中间件,然后查看我的假用户是否在会话中持续存在(至少在请求期间是这样)。但是,很明显我没有做 passport-saml 中间件期望看到的事情,因为无论我在会话中设置什么,它总是认为我未经身份验证并将我重定向到 SSO 提供商。

第一层中间件(express-session)是这样的:

session({
  secret: config.get('SESSION_SECRET'),
  cookie: {
    maxAge: 1000 * 60 * 60 * 24 * 7,
  },
  store,
  resave: true,
  saveUninitialized: false,
});

第二层中间件是这样的:

(req: Request, _: Response, next: NextFunction): void => {
  req.session.user = adminUser;
}

第三层中间件就是passport中间件

我确实尝试在第 2 步中调用 req.logIn,但我收到一条消息说 passport.initialize() middleware not in use

nestjs-session with a custom passport strategy原来是解决方案