新应用
新应用
Next App — 开箱即用的全栈脚手架用户认证数据库部署

用户认证

学习如何在 Next.js 应用中配置和自定义 Better Auth 认证系统。

本指南介绍如何使用 Better Auth 进行认证配置。Better Auth 是一个灵活的认证库,可与 Next.js 和 Drizzle ORM 无缝集成。

概述

Better Auth 提供:

  • 邮箱/密码认证(开箱即用)
  • OAuth 第三方登录(Google、GitHub 等)
  • 会话管理(安全 Cookie)
  • 数据库适配器(Drizzle ORM)

配置

认证配置位于 apps/web/lib/auth.ts:

import { betterAuth } from 'better-auth'
import { drizzleAdapter } from 'better-auth/adapters/drizzle'
import { db } from '@workspace/db'

export const auth = betterAuth({
  database: drizzleAdapter(db, {
    provider: 'pg',
  }),
  emailAndPassword: {
    enabled: true,
  },
})

客户端使用

在组件中使用认证客户端助手:

import { signIn, signUp, signOut, useSession } from '@/lib/auth-client'

export function AuthButton() {
  const { data: session } = useSession()

  if (session) {
    return <button onClick={() => signOut()}>退出登录</button>
  }

  return <button onClick={() => signIn.email({ email, password })}>登录</button>
}

服务端使用

在 Server Components 中检查认证状态:

import { auth } from '@/lib/auth'
import { headers } from 'next/headers'

export default async function ProtectedPage() {
  const session = await auth.api.getSession({
    headers: await headers(),
  })

  if (!session) {
    redirect('/auth')
  }

  return <div>欢迎,{session.user.name}</div>
}

数据库 Schema

认证相关表定义在 packages/db/src/schema.ts:

  • user — 用户账户
  • session — 活跃会话
  • account — OAuth 提供商关联
  • verification — 邮箱验证令牌

添加 OAuth 提供商

添加 Google OAuth:

import { betterAuth } from 'better-auth'

export const auth = betterAuth({
  // ... 现有配置
  socialProviders: {
    google: {
      clientId: process.env.GOOGLE_CLIENT_ID!,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
    },
  },
})

受保护路由

创建可复用的认证检查:

// lib/auth-guard.ts
import { auth } from '@/lib/auth'
import { headers } from 'next/headers'
import { redirect } from 'next/navigation'

export async function requireAuth() {
  const session = await auth.api.getSession({
    headers: await headers(),
  })

  if (!session) {
    redirect('/auth')
  }

  return session
}

下一步

  • 配置 OAuth 提供商实现社交登录
  • 自定义认证 UI 组件
  • 添加基于角色的访问控制

Next App — 开箱即用的全栈脚手架

一个生产级 Next.js 16 Monorepo 模板,内置认证、数据库、文档、国际化与现代工具链,端到端预集成。

数据库

在 Next.js 应用中配置和使用 Drizzle ORM 与 Neon PostgreSQL。

目录

概述配置客户端使用服务端使用数据库 Schema添加 OAuth 提供商受保护路由下一步