问题描述
当前 ObjectStack 的 AuthPlugin 集成 better-auth 时,存在两个严重 bug:
- better-auth handler 出错不会抛出异常,导致 catch/日志无法捕获,服务端权限/数据库异常全部 silent。
- 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、数据库异常等关键信息。
复现步骤
- 使用 ObjectUI 或其它集成 objectstack-ai/spec 的项目运行
pnpm dev
- 浏览器注册/登录,服务端报 500
- 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。
问题描述
当前 ObjectStack 的 AuthPlugin 集成 better-auth 时,存在两个严重 bug:
现象
/api/v1/auth/sign-up/email或/sign-in/email等返回 500(Internal Server Error),但服务端无任何错误日志。复现步骤
pnpm dev根因分析
bug1:better-auth handler 不抛异常
handleRequest -> auth.handler(request),better-auth 内部 catch error(adapter/database/ORM),直接返回 500 Response 对象,不 throw。bug2:adapter config 不符合预期
createDatabaseConfig()直接返回裸自定义 adapter,对应 better-auth 的 database 字段,缺少 provider 分组。建议修复方案
1. handleRequest 中主动检测 Response 状态码,补 log
2. database config 适配
将
createDatabaseConfig()返回包装成 factory:期望
@hotlong 可直接派发 task 进行修复。有跨仓库依赖请同步 objectui/roadmap。