You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

NestJS中使用Better Auth apiKey插件时auth对象无相关方法且智能提示失效的求助

NestJS中使用Better Auth apiKey插件时auth对象无相关方法且智能提示失效的求助

大家好,我在NestJS项目里集成Better Auth的apiKey插件时碰到了棘手的问题:把插件加入配置后,auth对象完全没暴露任何和apiKey相关的方法,连原本正常的智能提示都直接崩了,插件扩展的属性、方法全看不到。

我已经按照文档要求把apiKey()放进了插件数组,但就是没效果,下面是我的配置代码和依赖信息,麻烦帮忙看看怎么解决这个问题?

auth.ts 核心配置代码

import { apiKey } from "@better-auth/api-key";
import { expo } from "@better-auth/expo";
import { typeormAdapter } from "@hedystia/better-auth-typeorm";
import { BaseUserSession } from "@thallesp/nestjs-better-auth";
import { BetterAuthOptions, betterAuth } from "better-auth";
import { admin, openAPI } from "better-auth/plugins";
import { hashPassword, verifyPassword } from "@/util/utils";
import {...} from "../auth/roles";
import { procuraAuthPlugin } from "../better-auth/plugins/procura-auth";
import { dataSource } from "../datasources/better-auth.datasource";

export const auth = betterAuth({
  appName: "...",
  baseURL: process.env.URL,
  database: typeormAdapter(dataSource, {
    outputDir: "./src/typeorm",
    entitiesDir: "./src/models/better-auth",
    migrationsDir: "./src/migrations",
  }),
  emailAndPassword: {
    enabled: true,
    requireEmailVerification: true,
    sendResetPassword: async (data, request) => {},
  },
  emailVerification: {
    autoSignInAfterVerification: true,
    sendVerificationEmail: async (data, request) => {},
  },
  user: { additionalFields: { type: { type: "string", required: true } } },
  session: {
    additionalFields: { fcmToken: { type: "string", required: false } },
  },
  plugins: [
    apiKey(),
    procuraAuthPlugin(dataSource), // 自定义插件,无额外类型定义
    expo(),
    openAPI(),
    admin({...}),
  ],
});

package.json 依赖片段

{
  "dependencies": {
    "@better-auth/core": "^1.5.4",
    "@better-auth/expo": "^1.5.4",
    "@hedystia/better-auth-typeorm": "^0.7.0",
    "@thallesp/nestjs-better-auth": "^2.4.0",
    "better-auth": "^1.5.1",
    // 其他依赖...
  },
  "devDependencies": {
    "@better-auth/cli": "^1.4.21",
    // 其他开发依赖...
  },
  "packageManager": "yarn@4.9.2"
}

我已经尝试过的操作

  • 反复确认apiKey()插件正确加入了plugins数组,没有拼写或语法错误
  • 重启过VSCode和TypeScript语言服务
  • 执行过yarn install --force重新安装依赖

但问题依然存在,有没有朋友遇到过类似情况,或者知道怎么修复这个类型提示失效、方法不暴露的问题?


后续摸索出的可能修复方案

经过一番折腾,我整理了几个有效的修复方向,分享给有同样问题的朋友:

  1. 统一Better Auth相关依赖版本
    注意到我的better-auth主包是1.5.1,但@better-auth/core@better-auth/expo1.5.4,版本不一致很可能导致类型不兼容。建议把所有Better Auth生态的包统一到同一版本:

    yarn add better-auth@^1.5.4 @better-auth/core@^1.5.4 @better-auth/api-key@^1.5.4
    
  2. 手动扩展Auth对象类型
    如果自动类型合并失效,可以在项目根目录创建类型声明文件(比如better-auth.d.ts),手动补充apiKey的类型:

    import type { BetterAuth } from "better-auth";
    import type { ApiKeyPlugin } from "@better-auth/api-key";
    
    declare module "better-auth" {
      interface BetterAuth extends ApiKeyPlugin {}
    }
    

    记得在tsconfig.jsoninclude数组中加入这个声明文件。

  3. 彻底清理TS缓存
    执行以下命令清理缓存,再重启TS服务:

    rm -rf .tsbuildinfo
    yarn tsc --clearCache
    

    在VSCode中通过Ctrl+Shift+P/Cmd+Shift+P选择「TypeScript: Restart TS Server」重启语言服务。

  4. 检查第三方适配器兼容性
    确认@hedystia/better-auth-typeorm的版本和当前Better Auth主版本兼容,避免适配器的类型定义覆盖了插件的扩展类型。

如果大家还有其他更有效的方法,欢迎在评论区补充!

火山引擎 最新活动