2025年全球最受欢迎的JS鉴权框架Better Auth,3分钟带你学会

2025年 JavaScript 10大最受欢迎的前端项目已经公布,Better Auth作为里面唯一的鉴权框架,受到了特别推荐,如果你还对它不太了解,请花3分钟时间,我将带你快速上手。


Better Auth 是什么?

Better Auth 是一个框架无关的、通用的身份验证和授权框架,专为 TypeScript 设计。它最大的特点就是功能全面,开箱即用

核心能力一览

功能类别 具体能力 说明
基础认证 邮箱密码登录 内置安全的密码哈希和验证
社交登录 OAuth 支持 GitHub、Google、Discord、Twitter 等主流平台
安全增强 2FA 双因素认证 为账户提供额外安全层(邮箱、手机验证码等)
会话管理 多会话支持 支持用户同时登录多个设备
企业功能 SaaS 多租户支持 组织、团队、成员和邀请管理
高级功能 SSO 单点登录 创建自己的身份提供商
扩展性 插件生态 通过插件扩展功能

这些功能,Better Auth 都封装好了,只需要配置一下就能用。

相比传统的认证方案(比如 NextAuth.js),Better Auth 有几个明显的优势:

  1. 框架无关:不绑定特定框架,React、Vue、Svelte、Next.js、Nuxt 都能用
  2. TypeScript 原生:完整的类型支持,开发体验更好
  3. 插件化架构:需要什么功能就加什么插件,不会引入不必要的依赖
  4. 现代化设计:采用最新的 Web 标准和最佳实践

下面以 Next.js + React 带大家快速上手(Express+ Vue 也基本一样)

下面我们以 Next.js 和 React 为例,看看如何快速集成 Better Auth。

一、安装和基础配置

首先安装 Better Auth:

复制代码
npm install better-auth

然后创建环境变量文件 .env

ini 复制代码
BETTER_AUTH_SECRET=32位以上密钥
BETTER_AUTH_URL=http://localhost:3000

这里 BETTER_AUTH_SECRET 用于加密和哈希,必须至少 32 个字符。你可以用 openssl rand -base64 32 生成一个。

二、创建服务端认证实例

在项目根目录(或 lib/utils/ 文件夹)创建 auth.ts

php 复制代码
import { betterAuth } from "better-auth";
import { Pool } from "pg"; // 以 PostgreSQL 为例
​
export const auth = betterAuth({
  database: new Pool({
    host: process.env.DB_HOST,
    port: 5432,
    user: process.env.DB_USER,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_NAME,
  }),
});

如果你用的是 SQLite 或者想用 ORM(比如 Drizzle、Prisma),Better Auth 也提供了对应的适配器:

javascript 复制代码
// 使用 Drizzle
import { drizzleAdapter } from "better-auth/adapters/drizzle";
import { db } from "@/db";
​
export const auth = betterAuth({
  database: drizzleAdapter(db, {
    provider: "pg", // 或 "mysql", "sqlite"
  }),
});

三、创建数据库表

Better Auth 提供了 CLI 工具来管理数据库 schema:

bash 复制代码
# 生成迁移文件
npx @better-auth/cli generate
​
# 或者直接迁移(仅支持 Kysely 适配器)
npx @better-auth/cli migrate

四、在 Next.js 中挂载 API 路由

在 Next.js App Router 中,创建 app/api/auth/[...all]/route.ts

javascript 复制代码
import { auth } from "@/lib/auth";
import { toNextJsHandler } from "better-auth/next-js";

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

这样相当于一个拦截器,所有 /api/auth/* 的请求都会被 Better Auth 处理。

五、创建客户端实例

在客户端,创建 lib/auth-client.ts

javascript 复制代码
import { createAuthClient } from "better-auth/react";
​
export const authClient = createAuthClient({
  baseURL: "http://localhost:3000", // 如果是同域,一般就可以省略
});

六、在 React 组件中使用

好了,现在就可以在组件中使用认证功能了:

javascript 复制代码
"use client";
​
import { authClient } from "@/lib/auth-client";
import { useState } from "react";
​
export default function LoginPage() {
  const [email, setEmail] = useState("");
  const [password, setPassword] = useState("");
​
  const handleSignUp = async () => {
    const { data, error } = await authClient.signUp.email({
      email,
      password,
      name: "用户", // 可选
      callbackURL: "/dashboard",
    });
​
    if (error) {
      console.error("注册失败:", error);
    } else {
      console.log("注册成功:", data);
      // 可以在这里做重定向
    }
  };
​
  const handleSignIn = async () => {
    const { data, error } = await authClient.signIn.email({
      email,
      password,
      callbackURL: "/dashboard",
      rememberMe: true,
    });
​
    if (error) {
      console.error("登录失败:", error);
    } else {
      console.log("登录成功:", data);
    }
  };
​
  return (
    <div>
      <input
        type="email"
        value={email}
        onChange={(e) => setEmail(e.target.value)}
        placeholder="邮箱"
      />
      <input
        type="password"
        value={password}
        onChange={(e) => setPassword(e.target.value)}
        placeholder="密码"
      />
      <button onClick={handleSignUp}>注册</button>
      <button onClick={handleSignIn}>登录</button>
    </div>
  );
}

七、获取当前会话

使用 useSession hook 来获取当前用户信息:

javascript 复制代码
"use client";
​
import { authClient } from "@/lib/auth-client";
​
export default function Profile() {
  const { data: session, isPending } = authClient.useSession();
​
  if (isPending) {
    return <div>加载中...</div>;
  }
​
  if (!session?.user) {
    return <div>未登录</div>;
  }
​
  return (
    <div>
      <p>欢迎,{session.user.name}!</p>
      <p>邮箱:{session.user.email}</p>
      <button onClick={() => authClient.signOut()}>退出登录</button>
    </div>
  );
}

也可以在服务端获取会话信息,比如在 Next.js 的 Server Component 中:

javascript 复制代码
import { auth } from "@/lib/auth";
​
export default async function ServerProfile() {
  const session = await auth.api.getSession({
    headers: await import("next/headers").then((m) => m.headers()),
  });
​
  if (!session) {
    return <div>未登录</div>;
  }
​
  return <div>欢迎,{session.user.name}!</div>;
}

八、添加社交登录

以添加GitHub 登录为例,只需要在服务端配置中添加:

arduino 复制代码
import { betterAuth } from "better-auth";
import { github } from "better-auth/plugins";
​
export const auth = betterAuth({
  database: new Pool({ /* ... */ }),
  plugins: [
    github({
      clientId: process.env.GITHUB_CLIENT_ID!,
      clientSecret: process.env.GITHUB_CLIENT_SECRET!,
    }),
  ],
});

然后在客户端调用:

css 复制代码
<button onClick={() => authClient.signIn.social({ provider: "github" })}>
  使用 GitHub 登录
</button>

国外的主流软件,Google、Hugging face、Twitter 等都支持,但是国内的钉钉、微信登录需要自行实现。


Better Auth vs 传统方案

特性 手写认证 Better Auth
TypeScript 支持 需要自己写类型 原生支持
框架无关 - -
插件生态 - 丰富(账号密码、OAuth2、第三方登录等等)
多租户支持 需要自己实现 内置
2FA 支持 需要自己实现 内置
学习曲线 陡峭 平缓

在AI全栈时代, Better Auth逐渐成为了JS开发者进行鉴权开发的第一选择,所以它同样开放了MCP,可以在AI Coding时候更方便地调用。


我的公众号:橙子的AI前端笔记,谢谢大家关注,后续会持续输出更多前端 AI 深层次干货!

相关推荐
斯班奇的好朋友阿法法2 分钟前
ollama离线导入大模型
服务器·前端·javascript
misty youth7 分钟前
pnpm build,发生了什么
前端·electron·pnpm·build
1024小神8 分钟前
kotlin安卓项目配置webview开启定位功能
前端
踩着两条虫9 分钟前
VTJ.PRO 在线应用开发平台的术语表
vue.js·低代码·ai编程
踩着两条虫10 分钟前
VTJ.PRO 在线应用开发平台的构建与发布脚本
vue.js·ai编程·前端工程化
kyriewen16 分钟前
MutationObserver:DOM界的“卧底”,暗中观察每个风吹草动
前端·javascript·面试
踩着两条虫21 分钟前
VTJ.PRO 在线应用开发平台的开发者工具与代码质量
前端·vue.js·ai编程
TON_G-T30 分钟前
100行实现Mini React
前端·javascript·react.js
恋猫de小郭30 分钟前
2026 AI 时代下,Flutter 和 Dart 的机遇和未来发展,AI 一体化
android·前端·flutter
海上日出33 分钟前
给 LLM 装上"工具箱":2026 年 Function Calling 实战指南,任务完成率提升 85%(完整代码)
ai编程