如何配置Better-Auth适配Next.js自定义basePath?
Next.js basePath配置后Better-Auth认证API 404问题解决
我将Next.js项目部署到网站子路径,修改了next.config.ts:
const nextConfig: NextConfig = { basePath: "/subdomain", };
除认证功能外其他部分运行正常,但使用Better-Auth认证时,设置自定义basePath后API调用频繁返回404错误。
已尝试操作
- 将
BETTER_AUTH_URL更新为http://localhost:3000/subdomain(本地测试阶段) - 在
auth.ts中修改authClient和auth实例的basePath为/subdomain,请求http://localhost:3000/subdomain/sign-up/email返回404 - 将basePath改为
/subdomain/api/auth,请求http://localhost:3000/subdomain/api/auth/sign-up/email时控制台报错[Better Auth]: Error [Error: NOT_FOUND],POST请求/api/auth/sign-up/email同样返回404 - 尝试创建
subdomain文件夹并放入api文件夹,结果仍相同
解决方法
核心是让Better-Auth的配置完全适配Next.js的basePath,避免路径前缀不匹配:
修正Better-Auth的basePath配置
在auth.ts中,服务端和客户端的auth配置都要设置完整的API路径前缀,即Next.js的basePath + Better-Auth默认的API路由前缀(默认是/api/auth):// auth.ts import { initAuth } from "@better-auth/react"; import { BetterAuth } from "@better-auth/nextjs"; export const auth = BetterAuth({ basePath: "/subdomain/api/auth", providers: { email: {}, // 你的其他认证配置 }, }); export const { useAuth, signIn, signOut } = initAuth({ basePath: "/subdomain/api/auth", });更新环境变量
BETTER_AUTH_URL要指向完整的API前缀地址:BETTER_AUTH_URL=http://localhost:3000/subdomain/api/auth不要手动移动API路由文件
不需要创建subdomain文件夹存放API路由,Next.js的basePath会自动为所有路由(包括API路由)添加前缀,手动移动会导致路径重复,反而引发404。保持API路由在原位置app/api/auth/[...betterauth]/route.ts即可。验证请求路径
测试时确保请求的URL是http://localhost:3000/subdomain/api/auth/sign-up/email,这个路径会被Next.js正确映射到app/api/auth/[...betterauth]/route.ts,同时Better-Auth也能识别到正确的端点。
内容的提问来源于stack exchange,提问作者Evaldo De Paula Souza
相关产品推荐
相关产品推荐

