在Cloudflare Worker的处理程序中创建实例时,如何使用Better Auth的服务器端方法?
我在一个 Express.js / Node.js 应用中使用Better Auth,并通过一个 Cloudflare D1绑定 部署。
我的认证设置通过类似Cloudflare Worker的 fetch() 处理程序实现,因为D1数据库绑定(env.DB)只能在那里使用。
这是我当前的 auth.ts 文件:
import { betterAuth } from "better-auth";
export default {
async fetch(request, env) {
const auth = betterAuth({
database: env.DB, // D1 binding, auto-detected
/// Rest of better auth config
});
return auth.handler(request);
},
} satisfies ExportedHandler<{ DB: D1Database }>;
我需要在服务器端直接调用Better Auth的方法,例如 signUpEmail()。
文件如下:
import auth from "../../infrastructure/auth.ts";
export async function signUpWithEmail(
pseudo: string,
email: string,
password: string
) {
if (!pseudo || !email || !password) {
throw new Error("Pseudo, email and password are required");
}
try {
const result = await auth.api.signUpEmail({ // here is the problem
body: {
name: pseudo,
email: email,
password: password,
display_pseudo: pseudo,
},
});
} catch (error) {
console.error(`Signup error: ${error}`);
throw error;
}
}
auth.api未定义 / TypeScript错误,因为我导出的对象只包含 fetch()。
我的约束条件:
- 由于Cloudflare D1的存在,我需要访问
env.DB来使用Better Auth。 env.DB仅在请求上下文中可用。- 我希望直接在我的服务中使用Better Auth方法(
signUpEmail、signInEmail等)。
我的问题:
- 我的
auth.ts结构对于Cloudflare + Express.js + D1的组合是否正确? - 在这个架构中,暴露/在服务器端使用Better Auth方法的推荐做法是什么?
如果有任何建议或最佳实践,欢迎分享。
解决方案
你收到的错误 auth.api is undefined / TypeScript error, because my exported object only contains fetch(). 是因为你在fetch函数内创建了Better Auth实例。因此它只导出fetch函数,而不是auth函数,所以下面的代码会出现auth.api未定义的错误。
const result = await auth.api.signUpEmail({
你可以改为创建一个共享的auth API实例,如下所示
import { betterAuth } from "better-auth";
export function createAuth(env) {
return betterAuth({
database: env.DB,
});
}
现在你可以在你的函数中复用它
export default {
async fetch(request, env) {
const auth = createAuth(env);
return auth.handler(request);
},
} satisfies ExportedHandler<{ DB: D1Database }>;
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。