NuxSaaS 中使用 Better Auth 进行身份验证
NuxSaaS 使用 Better Auth,这是一个用于 Nuxt.js 应用程序的综合身份验证解决方案。本文档详细介绍了 NuxSaaS 如何集成 Better Auth 以提供安全灵活的用户身份验证,以及选择此方法的原因。
NuxSaaS 如何实现 Better Auth
Better Auth 主要在 server/utils/auth.ts
文件中进行配置。这个核心文件定义了身份验证策略、数据库适配器、邮件处理和钩子。
主要实现细节:
核心配置 (
server/utils/auth.ts
):- 数据库适配器:使用
drizzleAdapter
将 Better Auth 与 Drizzle ORM 和 PostgreSQL 数据库连接。与身份验证相关的表(如user
、account
、session
、verification
)的模式位于server/database/schema/auth.ts
。 - 邮箱和密码:启用并需要邮箱验证。它定义了如何发送重置密码和验证邮件,并与邮件服务(例如 Resend,通过
runtimeConfig
配置)集成。 - 社交提供商:配置了 OAuth,支持 GitHub 和 Google 等提供商。客户端 ID 和密钥通过
runtimeConfig
管理。 - 钩子:为审计日志实现
after
钩子。成功和失败的身份验证尝试、密码重置和邮箱验证都使用logAuditEvent
进行记录。 - 插件:集成 Better Auth 插件,如用于潜在管理员功能的
admin()
和用于将身份验证与 Stripe 账单关联的setupStripe()
。
typescript// server/utils/auth.ts 代码片段 const createBetterAuth = () => betterAuth({ baseURL: runtimeConfig.public.baseURL, secret: runtimeConfig.betterAuthSecret, database: drizzleAdapter( getDB(), { provider: 'pg', schema } ), // ... 其他配置,如 emailAndPassword、socialProviders、hooks });
- 数据库适配器:使用
会话获取 (
app/plugins/auth.server.ts
和app/plugins/auth.client.ts
):- 在服务器端 (
auth.server.ts
),如果页面是服务器端渲染且未缓存,则在初始请求期间获取会话,确保用户状态立即可用。 - 在客户端 (
auth.client.ts
),如果页面未进行服务器端渲染,或者已预渲染/缓存,则会进行会话获取,以避免水合不匹配并确保客户端与身份验证状态同步。
- 在服务器端 (
路由保护 (
server/middleware/1.auth.ts
和app/middleware/auth.global.ts
):- 服务器端中间件 (
1.auth.ts
) 保护 API 路由,如/api/admin/**
,确保只有具有“admin”角色的已验证用户才能访问它们。它使用server/utils/auth.ts
中的requireAuth
。 - 全局客户端中间件 (
auth.global.ts
) 处理页面级路由保护。它检查身份验证状态并根据路由元数据(例如,受保护页面的auth: true
,仅限未经身份验证用户访问的页面的guest: true
)重定向用户。
- 服务器端中间件 (
可组合函数 (
app/composables/useAuth.ts
):- 自定义可组合函数
useAuth()
可能包装了 Better Auth 的客户端实用程序,提供了一种在 Vue 组件中方便访问会话状态、登录/注销函数等的方法。
- 自定义可组合函数
数据库模式 (
server/database/schema/auth.ts
):- 此文件定义了 Better Auth 所需表的 Drizzle ORM 模式,例如
user
、account
和verification
。这些表存储用户凭据、关联的社交帐户和邮箱验证令牌。
- 此文件定义了 Better Auth 所需表的 Drizzle ORM 模式,例如
为什么选择 Better Auth?
- 可扩展性强:支持各种身份验证策略(OAuth、邮箱/密码、凭据)并允许自定义提供商。
- 默认安全:实施安全最佳实践,例如 CSRF 保护和安全会话管理。
- 数据库无关(通过适配器):虽然 NuxSaaS 使用 Drizzle 和 PostgreSQL,但 Better Auth 支持多种数据库适配器,提供了灵活性。
- 服务器端和客户端实用程序:为后端身份验证逻辑和前端会话管理提供全面的工具。
- 活跃的社区和开发:作为 Nuxt 身份验证的热门选择,它受益于持续的开发和社区支持。
通过使用 Better Auth,NuxSaaS 提供了一个强大、安全且对开发人员友好的身份验证系统,该系统易于维护和扩展。