Raypx

@raypx/auth

Better Auth 集成,支持懒加载初始化。

@raypx/auth 封装了 Better Auth 的配置与初始化,提供 Drizzle ORM 适配器、UUID v7 主键生成和动态 OAuth 提供商注册。

createAuth()

创建 Better Auth 实例。每次调用都会创建新实例。

import { createAuth } from "@raypx/auth"

const auth = createAuth()

内部实现包括:

  • Drizzle 适配器:使用 drizzleAdapter(db, { provider: "pg", schema }) 连接数据库
  • UUID v7:通过 generateId 覆盖默认的 ID 生成策略,使用时间有序的 UUID
  • 邮箱密码认证:默认启用,包含密码重置和邮箱验证
  • TanStack Start Cookies 插件tanstackStartCookies() 处理跨端 Cookie

OAuth 提供商

OAuth 提供商根据环境变量动态注册——只有在对应环境变量存在时才会启用:

提供商所需环境变量
GoogleVITE_PUBLIC_AUTH_GOOGLE_ID + AUTH_GOOGLE_SECRET
GitHubAUTH_GITHUB_ID + AUTH_GITHUB_SECRET
// 内部逻辑简化
const socialProviders = {}

if (env.VITE_PUBLIC_AUTH_GOOGLE_ID && env.AUTH_GOOGLE_SECRET) {
  socialProviders.google = {
    clientId: env.VITE_PUBLIC_AUTH_GOOGLE_ID,
    clientSecret: env.AUTH_GOOGLE_SECRET,
  }
}

getAuth()

获取全局单例 Auth 实例。首次调用时创建,后续返回缓存实例。

import { getAuth } from "@raypx/auth"

const auth = getAuth()

推荐使用 getAuth(),避免重复初始化数据库连接和配置。

邮件功能

@raypx/auth 内置了以下邮件发送逻辑:

事件触发时机
邮箱验证注册成功后自动发送
密码重置用户请求重置时发送

密码重置的 Token 有效期为 1 小时,重置成功后会自动撤销所有现有会话。

环境变量

变量类型必填说明
AUTH_SECRETstring (min 32)加密密钥
AUTH_URLurl应用基础 URL
AUTH_CORS_ORIGINurl允许的跨域来源
AUTH_EMAIL_FROM_NAMEstring发件人名称
AUTH_GOOGLE_SECRETstringGoogle OAuth 密钥
AUTH_GITHUB_IDstringGitHub OAuth 客户端 ID
AUTH_GITHUB_SECRETstringGitHub OAuth 密钥
VITE_PUBLIC_AUTH_GOOGLE_IDstringGoogle OAuth 客户端 ID
VITE_PUBLIC_AUTH_GOOGLE_ENABLEDstring是否启用 Google 登录(前端)
VITE_PUBLIC_AUTH_GITHUB_ENABLEDstring是否启用 GitHub 登录(前端)

auth(已废弃)

import { auth } from "@raypx/auth" // 已废弃

auth 是一个 Proxy 对象,内部调用 getAuth()。已标记为 @deprecated,新代码请使用 getAuth()

在 RPC 中的使用

@raypx/rpc 的 Context 通过 auth.api.getSession() 获取用户会话:

import { auth } from "@raypx/auth"

export async function createContext({ req }: { req: Request }) {
  const session = await auth.api.getSession({ headers: req.headers })
  return { session }
}

On this page