【发布时间】:2022-02-02 03:31:26
【问题描述】:
我正在尝试使用此库 (express-openid-connect) 提供具有“简单设置”的身份验证后端,但在从 express.Request 调用 oidc 对象时遇到一个简单错误:
app.get("/", (req: express.Request, res: express.Response) => {
res.send(req.oidc.isAuthenticated() ? "Hi user" : "Hi guest");
});
当然,我得到了这个错误:
“Request
”类型上不存在属性“oidc”。ts(2339)
到目前为止,我已经尝试实现一个接口来替换 express.Request,但我遇到了更多错误:
interface OIDRequest extends express.Request {
oidc: OpenidRequest
}
app.get("/", (req: OIDRequest, res: express.Response) => {
res.send(req.oidc.isAuthenticated() ? "Hi user" : "Hi guest");
});
现在:
没有重载匹配这个调用。
Overload 1 of 4, '(path: PathParams, ...handlers: RequestHandler
[]): Express',给出以下错误。 '(req: OIDRequest, res: express.Response) => void' 类型的参数不可分配给'RequestHandler
' 类型的参数。 参数“req”和“req”的类型不兼容。
“Request
”类型中缺少属性“oidc”,但在“OIDRequest”类型中是必需的。 Overload 2 of 4, '(path: PathParams, ...handlers: RequestHandlerParams
[]): Express',给出以下错误。 '(req: OIDRequest, res: express.Response) => void' 类型的参数不可分配给'RequestHandlerParams
' 类型的参数。 类型 '(req: OIDRequest, res: express.Response) => void' 不可分配给类型 'RequestHandler
'。 Overload 3 of 4, '(path: PathParams, subApplication: Application): Express',给出以下错误。
'(req: OIDRequest, res: express.Response) => void' 类型的参数不可分配给'Application' 类型的参数。
类型 '(req: OIDRequest, res: Response) => void' 缺少类型 'Application' 中的以下属性:init、defaultConfiguration、engine、set 和 61 more.ts(2769)
以防万一你问我的应用是这样配置的:
import express from 'express';
import { auth, ConfigParams, OpenidRequest } from 'express-openid-connect';
require('dotenv').config();
const app = express();
const config: ConfigParams = {
authRequired: false,
auth0Logout: true,
issuerBaseURL: process.env.ISSUER_BASE_URL,
baseURL: process.env.BASE_URL,
clientID: process.env.CLIENT_ID,
secret: process.env.SECRET,
};
app.use(auth(config));
interface OIDRequest extends express.Request {
oidc: OpenidRequest
}
app.get("/", (req: OIDRequest, res: express.Response) => {
res.send(req.oidc.isAuthenticated() ? "Hi user" : "Hi guest");
});
app.get("/profile", (req: express.Request, res: express.Response) => {
res.json(req.oidc.user);
});
const port = process.env.PORT || 8080;
app.listen(port, () => {
console.log(`Listening to port: ${port}`);
});
我在这里问之前找到了一些答案,但这些不适用于这种情况。我应该如何从express.Request 对象调用oidc?
【问题讨论】:
标签: node.js typescript express auth0