NestJS 中带有 openid-client 和 passport 的未知身份验证策略 "oidc"

Unknown authentication strategy "oidc" with openid-client and passport in NestJS

我正在关注 this article 在 NestJS 中实现 OIDC 登录。 但我被困住了,不知道如何进行。 我已经完成了文章中描述的内容,它的工作原理是我被重定向到输入我的用户名和密码,但是当我被重定向回我的应用程序时,我回到了路径 /auth/callback 而不是显示我的应用程序被记录in,它显示一个只有字符 {} 的空白页。当我调查后端时,我可以看到以下错误:

GeneralExceptionFilter: Error: Unknown authentication strategy "oidc"
    at attempt (/Users/roberto/dev/ps360/packages/app/node_modules/passport/lib/middleware/authenticate.js:193:39)
    at authenticate (/Users/roberto/dev/ps360/packages/app/node_modules/passport/lib/middleware/authenticate.js:370:7)
    at Object.use (/Users/roberto/dev/ps360/node_modules/@nestjs/core/middleware/utils.js:51:24)
    at /Users/roberto/dev/ps360/node_modules/@nestjs/core/router/router-proxy.js:9:23
    at /Users/roberto/dev/ps360/node_modules/@nestjs/core/middleware/middleware-module.js:157:28
    at Layer.handle [as handle_request] (/Users/roberto/dev/ps360/node_modules/@nestjs/platform-express/node_modules/express/lib/router/layer.js:95:5)
    at next (/Users/roberto/dev/ps360/node_modules/@nestjs/platform-express/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/Users/roberto/dev/ps360/node_modules/@nestjs/platform-express/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/Users/roberto/dev/ps360/node_modules/@nestjs/platform-express/node_modules/express/lib/router/layer.js:95:5)
    at /Users/roberto/dev/ps360/node_modules/@nestjs/platform-express/node_modules/express/lib/router/index.js:281:22

我一直在兜兜转转,Google 没有找到任何线索。有人有什么想法吗?

我想通了。我正在回答我自己的问题,以防其他人遇到这个罕见的问题。

出于某种原因,安装了 passport 的流氓版本,即使 package.json 只要求 "passport": "^0.4.1" 也安装了 passport v0.5.2 的流氓副本在 node_modules。我无法解释它是如何结束的。无论如何,它导致了一些不匹配,导致 @nestjs/passport 无法正确注册身份验证策略。