SuperAPI AI 工具集

better-auth

安全与审计

查看项目

更新于 10-16 01:58

技能介绍

用途

Better Auth 是一个面向 TypeScript 的综合性、框架无关的身份认证与授权框架。它用于在 TypeScript/JavaScript 应用中实现认证功能,包括邮箱/密码登录、社交 OAuth 登录,以及通过插件扩展的 2FA、Passkeys、魔法链接、组织/多租户等进阶能力。它可与 Next.js、Nuxt、SvelteKit、Remix、Astro、Hono、Express 等多种框架配合使用。

主要能力

  • 邮箱/密码认证(内置):基础认证、邮箱验证、密码重置、用户名登录。
  • OAuth 社交登录(内置):支持 GitHub、Google、Discord 等提供商,含提供商配置与令牌管理。
  • 进阶功能(需插件):
    • 双因素认证(2FA/TOTP):需 twoFactor 插件。
    • Passkeys/WebAuthn:需 passkey 插件,实现无密码认证。
    • 魔法链接(Magic Link):需 magicLink 插件,基于邮箱登录。
    • 用户名认证:需 username 插件。
    • 组织/多租户:需 organization 插件,提供团队/组织功能。
  • 内置能力:限流(防止滥用)、会话管理(用户会话)。

使用方式

安装

npm install better-auth
# 或 pnpm/yarn/bun add better-auth

环境变量

创建 .env:

BETTER_AUTH_SECRET=<generated-secret-32-chars-min>
BETTER_AUTH_URL=http://localhost:3000

服务端设置

创建 auth.ts(可位于根目录、lib/、utils/ 或 src/app/server/ 下):

import { betterAuth } from "better-auth";

export const auth = betterAuth({
  database: {
    // 参见 references/database-integration.md
  },
  emailAndPassword: {
    enabled: true,
    autoSignIn: true
  },
  socialProviders: {
    github: {
      clientId: process.env.GITHUB_CLIENT_ID!,
      clientSecret: process.env.GITHUB_CLIENT_SECRET!,
    }
  }
});

数据库 Schema

npx @better-auth/cli generate  # 生成 schema/迁移
npx @better-auth/cli migrate   # 应用迁移(仅 Kysely)

挂载 API Handler(Next.js App Router 示例)

// app/api/auth/[...all]/route.ts
import { auth } from "@/lib/auth";
import { toNextJsHandler } from "better-auth/next-js";

export const { POST, GET } = toNextJsHandler(auth);

其他框架的设置参见 references/email-password-auth.md#framework-setup。

客户端设置

创建 auth-client.ts:

import { createAuthClient } from "better-auth/client";

export const authClient = createAuthClient({
  baseURL: process.env.NEXT_PUBLIC_BETTER_AUTH_URL || "http://localhost:3000"
});

基本用法

// 注册
await authClient.signUp.email({
  email: "user@example.com",
  password: "secure123",
  name: "John Doe"
});

// 登录
await authClient.signIn.email({
  email: "user@example.com",
  password: "secure123"
});

// OAuth
await authClient.signIn.social({ provider: "github" });

// 会话
const { data: session } = authClient.useSession(); // React/Vue/Svelte
const { data: session } = await authClient.getSession(); // Vanilla JS

认证方式选择指南

  • 选择邮箱/密码:构建使用传统认证的标准 Web 应用;需要完全控制用户凭据;面向偏好邮箱账户的用户。
  • 选择 OAuth:希望以最小摩擦快速注册;用户已有社交账户;需要访问社交资料数据。
  • 选择 Passkeys:希望无密码体验;面向现代浏览器/设备;安全为最高优先级。
  • 选择魔法链接:希望无密码但不想引入 WebAuthn 复杂度;面向邮箱优先的用户;需要临时访问链接。
  • 组合多种方式:希望为不同用户偏好提供灵活性;构建具有多种认证需求的企业应用;需要渐进增强(从简单开始,逐步增加选项)。

核心架构

Better Auth 采用客户端-服务器架构:

  • 服务端(better-auth):处理认证逻辑、数据库操作、API 路由。
  • 客户端(better-auth/client):为前端提供钩子/方法。
  • 插件:同时扩展服务端与客户端功能。

实施清单

  • 安装 better-auth 包
  • 设置环境变量(SECRET、URL)
  • 创建带数据库配置的 auth 服务端实例
  • 运行 schema 迁移(npx @better-auth/cli generate)
  • 在框架中挂载 API handler
  • 创建客户端实例
  • 实现注册/登录 UI
  • 为组件添加会话管理
  • 设置受保护路由/中间件
  • 按需添加插件(之后重新生成 schema)
  • 测试完整认证流程
  • 配置邮件发送(验证/重置)
  • 为生产环境启用限流
  • 设置错误处理

适用场景

  • 在 TypeScript/JavaScript 应用中实现认证。
  • 添加邮箱/密码或社交 OAuth 认证。
  • 设置 2FA、Passkeys、魔法链接等进阶认证功能。
  • 构建带组织支持的多租户应用。
  • 管理会话与用户生命周期。
  • 与任意框架(Next.js、Nuxt、SvelteKit、Remix、Astro、Hono、Express 等)配合使用。

参考文档与资源

  • 邮箱/密码认证:邮箱/密码设置、验证、密码重置、用户名认证
  • OAuth 提供商:社交登录设置、提供商配置、令牌管理
  • 数据库集成:数据库适配器、schema 设置、迁移
  • 进阶功能:2FA/MFA、Passkeys、魔法链接、组织、限流、会话管理
  • 脚本:scripts/better_auth_init.py - 通过交互式设置初始化 Better Auth 配置
  • 文档:https://www.better-auth.com/docs
  • GitHub:https://github.com/better-auth/better-auth
  • 插件:https://www.better-auth.com/docs/plugins
  • 示例:https://www.better-auth.com/docs/examples

限制

资料未提供关于收费、价格、平台支持范围、性能效果等方面的具体说明,暂未提供。