trpc 路由器内省测试

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

背景

我有一个 API,我需要在输入验证后对调用者进行身份验证。

这是因为对于某些端点,授权取决于输入参数中提供的信息(例如,调用者想要查询或更改哪个服务器端资源,以及调用者是否对该特定资源具有权限)。

我写了一些中间件,它插入到过程调用链中的

.input()
调用之后。 (参见下面示例路由器中的
.use(auth([authMethod1, authMethod2])
)。)

注意,我的

auth()
中间件方法采用函数列表,因此我可以自定义每个端点所需的身份验证类型。某些类型的身份验证可能取决于输入参数,而其他类型则可能不。此外,一些端点需要不记名令牌授权,其他端点需要 API 密钥。这种方法给了我所需的灵活性。

这种方法的问题在于,如果开发人员创建了一个新端点而忘记添加 auth 中间件,端点将完全开放。

因此,我想编写一个单元测试来防止这种情况。

问题

如何从单元测试中枚举我的路由器并检查我的 auth 中间件是否连接到每个端点?

这方面的文档很少,只给出了在顶层(过程)级别完成的身份验证中间件的示例。 正如我在上面解释的那样,对我的所有端点应用相同类型的授权不适用于我的用例。 示例路由器:

export const accountsRouter = router({
  getOne: apiProcedure
    .input(inputSchema...)
    .use(auth([authMethod1, authMethod2]))
    .mutation(() => {
       // query logic
    }),
  getTwo: apiProcedure
    .use(auth([authMethod1, authMethod3]))
    .output(outputSchema...)
    .query(() => {
       // query logic
    }),
typescript api authentication middleware trpc
© www.soinside.com 2019 - 2024. All rights reserved.