node.js - Okta Jwt-Verifier 不工作 - “jwt_verifier_1.OktaJwtVerifier 不是构造函数”
问题描述
在我的 SPA 中,编译我的 TypeScript,然后启动服务器后,我得到:
“TypeError:jwt_verifier_1.OktaJwtVerifier 不是构造函数”
我已经为 @okta/jwt-verifier 安装了模块,并安装了 npm 以确保模块在那里。
这是我的 auth.ts 文件,其中 import 语句被注释掉(因为我认为这不是解决模块问题的正确方法):
import { Request, Response, NextFunction } from 'express';
// import { OktaJwtVerifier } from '@okta/jwt-verifier';
const OktaJwtVerifier = require('okta/jwt-verifier');
const oktaJwtVerifier = new OktaJwtVerifier({
clientId: '{{clientID}}',
issuer: '{{OktaURL}}'
});
export async function oktaAuth(req:Request, res:Response, next:NextFunction) {
try {
const token = (req as any).token;
if (!token) {
return res.status(401).send('Not Authorised');
}
const jwt = await oktaJwtVerifier.verifyAccessToken(token);
req.user = {
uid: jwt.claims.uid,
email: jwt.claims.sub
};
next();
}
catch (err) {
return res.status(401).send(err.message);
}
}
这是编译后的JS文件:
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const jwt_verifier_1 = require("@okta/jwt-verifier");
// const OktaJwtVerifier = require('okta/jwt-verifier');
const oktaJwtVerifier = new jwt_verifier_1.OktaJwtVerifier({
clientId: '0oavj2s8pN39hTh0v356',
issuer: 'https://dev-214594.okta.com/oauth2/default'
});
function oktaAuth(req, res, next) {
return __awaiter(this, void 0, void 0, function* () {
try {
const token = req.token;
if (!token) {
return res.status(401).send('Not Authorised');
}
const jwt = yield oktaJwtVerifier.verifyAccessToken(token);
req.user = {
uid: jwt.claims.uid,
email: jwt.claims.sub
};
next();
}
catch (err) {
return res.status(401).send(err.message);
}
});
}
exports.oktaAuth = oktaAuth;
服务器应该在没有任何错误的情况下启动。
解决方案
导入它的正确方法是使用:
import * as OktaJwtVerifier from '@okta/jwt-verifier';
此外,尚未为 TypeScript 正确声明类型。您需要在项目的根目录下创建一个 global.d.ts,如果您还没有这样做的话,其中包含:
declare module "@okta/jwt-verifier";
@okta/okta-sdk-node-js 可以使用相同的方法。
推荐阅读
- android - Android - 更改 NavigationView 中单个项目的背景颜色
- javascript - 更改缩放级别 3d scatterPlot (Plotly)
- html - 防止包含跨度的直通
- java - 如何在 Java 中为临时目录配置 root
- data-structures - 在第二个哈希函数中使用复合数进行双重哈希
- python - Robot Framework IDE Python SendKeys 库
- powershell - Powershell将文本文件中的项目添加到二维数组
- scala - 在Scala中创建元素差异为1的序列组?
- oracle - 是否可以将 Oracle PL/SQL 触发器作为函数和包?
- android - 更改标签宽度