Skip to content

[BUG] AuthPlugin/BETTER-AUTH error handling & adapter config breaks silent: no logs, database errors swallowed #878

@hotlong

Description

@hotlong

问题描述

当前 ObjectStack 的 AuthPlugin 集成 better-auth 时,存在两个严重 bug:

  1. better-auth handler 出错不会抛出异常,导致 catch/日志无法捕获,服务端权限/数据库异常全部 silent。
  2. database 适配器 config 方式不符合 better-auth 设计,导致数据库适配器无法被正确识别(未提供 provider 字段等),Auth API 一旦出错服务端完全无日志。

现象

  • 浏览器请求 /api/v1/auth/sign-up/email/sign-in/email 等返回 500(Internal Server Error),但服务端无任何错误日志。
  • 控制台只有插件加载等 info/warn,没有 auth request error、数据库异常等关键信息。

复现步骤

  1. 使用 ObjectUI 或其它集成 objectstack-ai/spec 的项目运行 pnpm dev
  2. 浏览器注册/登录,服务端报 500
  3. Server logs 没有任何 error/warn 输出

根因分析

bug1:better-auth handler 不抛异常

  • AuthPlugin 通过 handleRequest -> auth.handler(request),better-auth 内部 catch error(adapter/database/ORM),直接返回 500 Response 对象,不 throw。
  • 导致前端报错但 catch 块永远不会触发,error log 永远不会输出到控制台。

bug2:adapter config 不符合预期

  • createDatabaseConfig() 直接返回裸自定义 adapter,对应 better-auth 的 database 字段,缺少 provider 分组。
  • better-auth 要求:
    database: {
      provider: "custom",
      adapter: customAdapter
    }
  • 当前方式:
    database: createObjectQLAdapter(dataEngine)
  • 这样可能导致 adapter 没有被正确加载、错误 silent。

建议修复方案

1. handleRequest 中主动检测 Response 状态码,补 log

async handleRequest(request: Request): Promise<Response> {
    const auth = this.getOrCreateAuth();
    const response = await auth.handler(request);
    if (response.status >= 500) {
        const body = await response.clone().text();
        console.error('[AuthManager] better-auth returned error:', response.status, body);
    }
    return response;
}

2. database config 适配

createDatabaseConfig() 返回包装成 factory:

private createDatabaseConfig(): any {
    if (this.config.dataEngine) {
      const adapter = createObjectQLAdapter(this.config.dataEngine);
      return (options: any) => ({
        provider: "custom",
        adapter,
      });
    }
    // fallback...
}

期望

  • 出现 Internal Server Error 时,服务端可以打印出更详细的错误日志(包括数据库异常、adapter异常等)。
  • database adapter 能被正确识别,适配 ORM 或自定义 IDataEngine 方案。

@hotlong 可直接派发 task 进行修复。有跨仓库依赖请同步 objectui/roadmap。

Metadata

Metadata

Labels

bugSomething isn't working

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions