OKTA Express中间件-TypeError [ERR_INVALID_ARG_TYPE]:“原始”参数必须为Function类型。收到的类型未定义

问题描述 投票:0回答:2

仅在应用程序中包含以下内容会导致以下错误。

const { ExpressOIDC } = require('@okta/oidc-middleware');

完整错误:

$ node app.js 
internal/util.js:257
    throw new ERR_INVALID_ARG_TYPE('original', 'Function', original);
    ^

TypeError [ERR_INVALID_ARG_TYPE]: The "original" argument must be of type Function. Received type undefined
    at promisify (internal/util.js:257:11)
    at Object.<anonymous> (/dev/tmpOidc/node_modules/jose/lib/jwk/key/rsa.js:13:25)
    at Module._compile (internal/modules/cjs/loader.js:689:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
    at Module.load (internal/modules/cjs/loader.js:599:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
    at Function.Module._load (internal/modules/cjs/loader.js:530:3)
    at Module.require (internal/modules/cjs/loader.js:637:17)
    at require (internal/modules/cjs/helpers.js:20:18)
    at Object.<anonymous> (/dev/tmpOidc/node_modules/jose/lib/jwk/import.js:9:16)

复制步骤1.创建一个新的节点应用程序,并添加express和Okta的oidc middleware

npm init
npm install express --save
npm install --save @okta/oidc-middleware
  1. 创建app.js
const express = require('express')
const app = express()
const port = 3000

// const { ExpressOIDC } = require('@okta/oidc-middleware');

app.get('/', (req, res) => res.send('Hello World!'))

app.listen(port, () => console.log(`Example app listening at http://localhost:${port}`))

  1. 运行
node app.js

查看其运行方式。最后,取消注释并包括设置OIDC中间件的行。

const { ExpressOIDC } = require('@okta/oidc-middleware');

再次运行该应用程序,我得到上面的错误。

已解决:需要在节点v12而非v10上运行

node.js express middleware okta
2个回答
1
投票

我刚刚发布了YouTube video,向您展示了如何使用Okta的OIDC中间件。

您可以找到我使用的步骤here。总结一下:

  1. 使用express-generator和pug创建新项目:npx express-generator --view=pug
  2. 在Okta上以http://localhost:3000/callback作为登录重定向URI添加新的web应用
  3. 安装示意图CLI:npm install -g @angular-devkit/schematics-cli
  4. [使用Okta值安装并运行OktaDev原理图:
npm i @oktadev/schematics
schematics @oktadev/schematics:add-auth --issuer=$issuer --clientId=$clientId -- 
clientSecret=$clientSecret
  1. 启动您的应用并通过Okta进行身份验证:npm start

您可以在this GitHub repo中看到这些步骤的结果。


0
投票

已解决。当我发布问题时,我应该包括系统信息,例如Node的版本。我有v10.8.0。一旦我更新到v12,typeerror就消失了。

© www.soinside.com 2019 - 2024. All rights reserved.