安装

安装依赖

让我们首先将 Better Auth 添加到您的项目中:

npm install better-auth

如果您使用的是前后端分离的项目,请确保在这两个项目都安装 Better Auth。

设置环境变量

在项目根目录创建一个 .env 文件,并添加以下环境变量:

  1. 密钥

库用于加密和生成哈希的随机值。您可以使用下面的按钮生成一个,或者您可以使用类似 openssl 的工具。

.env
BETTER_AUTH_SECRET=
  1. 设置基础 URL
.env
BETTER_AUTH_URL=http://localhost:3000 #您应用的基础 URL

创建 Better Auth 实例文件

在以下位置之一创建一个名为 auth.ts 的文件:

  • 项目根目录
  • lib/ 文件夹
  • utils/ 文件夹

您也可以将这些文件夹嵌套在 src/app/server/ 文件夹下。(例如 src/lib/auth.tsapp/lib/auth.ts)。

在此文件中,导入 Better Auth 并创建您的认证实例。确保使用变量名 auth 导出认证实例,或者作为 default 导出。

auth.ts
import { betterAuth } from "better-auth";
 
export const auth = betterAuth({
    //...
})

配置数据库

Better Auth需要一个数据库来存储用户数据。您可以轻松配置Better Auth 使用SQLite、PostgreSQL 或 MySQL,由Kysely处理这些数据库的查询和迁移。

auth.ts
import { betterAuth } from "better-auth";
import Database from "better-sqlite3";
 
export const auth = betterAuth({
    database: new Database("./sqlite.db"),
})

您也可以向 database 选项提供任何 Kysely 方言或 Kysely 实例。

使用 LibsqlDialect 的示例:

auth.ts
import { betterAuth } from "better-auth";
import { LibsqlDialect } from "@libsql/kysely-libsql";
 
const dialect = new LibsqlDialect({
    url: process.env.TURSO_DATABASE_URL || "",
    authToken: process.env.TURSO_AUTH_TOKEN || "",
})
 
export const auth = betterAuth({
  database: {
    dialect,
    type: "sqlite"
  }
});

适配器

如果您更喜欢使用ORM,或者如果您的数据库Kysely不支持,您可以使用内置适配器之一。

auth.ts
import { betterAuth } from "better-auth";
import { prismaAdapter } from "better-auth/adapters/prisma";
import { PrismaClient } from "@prisma/client";
 
const prisma = new PrismaClient();
export const auth = betterAuth({
    database: prismaAdapter(prisma, {
        provider: "sqlite", // 或 "mysql", "postgresql", ...等
    }),
});

创建数据库表

Better Auth 包含一个 CLI 工具,帮助管理库所需的数据库文件。

  • 生成:此命令生成 ORM 架构或 SQL 迁移文件。

如果您使用的是 Kysely,您可以使用下面的 migrate 命令直接应用迁移。仅当您计划手动应用迁移时才使用 generate

终端
npx @better-auth/cli generate
  • 迁移:此命令直接在数据库中创建所需的表。(仅适用于内置的 Kysely 适配器)
终端
npx @better-auth/cli migrate

查看 CLI 文档 获取更多信息。

如果您想手动创建架构,可以在 数据库部分 找到所需的核心架构。

认证方法

Better Auth 内置支持电子邮件/密码和社交登录。

auth.ts
import { betterAuth } from "better-auth"
 
export const auth = betterAuth({
    //...其他选项
    emailAndPassword: {  
        enabled: true
    },
    socialProviders: { 
        github: { 
           clientId: process.env.GITHUB_CLIENT_ID as string, 
           clientSecret: process.env.GITHUB_CLIENT_SECRET as string, 
        }, 
    }, 
});

您可以通过插件使用更多认证方法,如 通行密钥用户名魔法链接 等。

挂载处理程序

要处理API请求,您需要在服务器上设置路由处理程序。

在您框架指定的通配符路由处理程序中创建一个新文件或路由。此路由应处理路径 /api/auth/* 的请求(除非您配置了不同的基础路径)。

Better Auth 支持任何具有标准 Request 和 Response 对象的后端框架,并为流行框架提供辅助函数。

/app/api/auth/[...all]/route.ts
import { auth } from "@/lib/auth"; // 您的认证文件路径
import { toNextJsHandler } from "better-auth/next-js";
 
export const { POST, GET } = toNextJsHandler(auth);

创建客户端实例

客户端库帮助您与认证服务器交互。Better Auth 为所有流行的Web框架提供客户端,包括原生JavaScript。

  1. 从您框架的包中导入 createAuthClient(例如,React 使用 "better-auth/react")。
  2. 调用函数创建您的客户端。
  3. 传递您认证服务器的基础 URL。(如果认证服务器与您的客户端运行在同一域名上,您可以跳过此步骤。)

如果您使用的基础路径不是 /api/auth,请确保传递包含路径的完整 URL。(例如 http://localhost:3000/custom-path/auth

lib/auth-client.ts
import { createAuthClient } from "better-auth/react"
export const authClient = createAuthClient({
    /** 服务器的基础 URL(如果您使用相同域名,则可选) */
    baseURL: "http://localhost:3000"
})

提示:如果您喜欢,也可以导出特定方法:

export const { signIn, signUp, useSession } = createAuthClient()

开始新的征程

开始新的认证之路吧!您现在可以在应用程序中使用 better-auth 了。继续阅读 基本用法 了解如何使用认证实例登录用户。

On this page