返回顶部
b

better-auth更好认证

|

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 0.1.0
安全检测
已通过
2,070
下载量
免费
免费
1
收藏
概述
安装方式
版本历史

better-auth

better-auth - D1 适配器与错误预防指南

包名: better-auth@1.4.16 (2026年1月21日)
重大变更: 仅ESM (v1.4.0), 默认禁止管理员模拟 (v1.4.6), 多团队表结构变更 (v1.3), D1需要Drizzle/Kysely (无直接适配器)



⚠️ 关键: D1 适配器要求

better-auth 没有 d1Adapter()。你必须使用:

  • - Drizzle ORM (推荐): drizzleAdapter(db, { provider: sqlite })
  • Kysely: new Kysely({ dialect: new D1Dialect({ database: env.DB }) })

详见下方问题 #1。



v1.4.10 新特性 (2025年12月31日)

主要特性:

  • - OAuth 2.1 提供者插件 - 构建自己的OAuth提供者 (替代MCP插件)
  • Patreon OAuth 提供者 - 使用Patreon社交登录
  • Kick OAuth 提供者 - 支持刷新令牌
  • Vercel OAuth 提供者 - 使用Vercel登录
  • 全局 backgroundTasks 配置 - 延迟操作以提升性能
  • 表单数据支持 - 带fetch元数据回退的电子邮件认证
  • Stripe 增强 - 灵活订阅生命周期, disableRedirect 选项

管理插件更新:

  • - ⚠️ 重大变更: 默认禁止模拟管理员 (v1.4.6)
  • 支持基于权限的角色用户更新
  • 角色类型推断改进

安全修复:

  • - SAML XML解析器加固, 可配置大小限制
  • SAML断言时间戳验证, 支持按提供者时钟偏差
  • SSO域名验证提供者信任
  • 弃用算法拒绝
  • 行nonce强制

📚 文档: https://www.better-auth.com/changelogs



v1.4.0 新特性 (2025年11月22日)

主要特性:

  • - 无状态会话管理 - 无需数据库存储的会话
  • 仅ESM包 ⚠️ 重大变更: 不再支持CommonJS
  • JWT密钥轮换 - 自动密钥轮换增强安全性
  • SCIM 配置 - 企业用户配置协议
  • @standard-schema/spec - 替代ZodType进行验证
  • CaptchaFox 集成 - 内置验证码支持
  • 自动服务端IP检测
  • 基于Cookie的账户数据存储
  • 多通行密钥来源支持
  • RP发起的登出端点 (OIDC)

📚 文档: https://www.better-auth.com/changelogs



v1.3 新特性 (2025年7月)

主要特性:

  • - 支持SAML 2.0的SSO - 企业单点登录 (移至独立 @better-auth/sso 包)
  • 多团队支持 ⚠️ 重大变更: teamId 从成员表中移除, 需要新的 teamMembers 表
  • 附加字段 - 组织/成员/邀请模型的自定义字段
  • 性能改进和错误修复

📚 文档: https://www.better-auth.com/blog/1-3



替代方案: Kysely 适配器模式

如果你更喜欢Kysely而不是Drizzle:

文件: src/auth.ts

typescript
import { betterAuth } from better-auth;
import { Kysely, CamelCasePlugin } from kysely;
import { D1Dialect } from kysely-d1;

type Env = {
DB: D1Database;
BETTERAUTHSECRET: string;
// ... 其他环境变量
};

export function createAuth(env: Env) {
return betterAuth({
secret: env.BETTERAUTHSECRET,

// 使用D1Dialect的Kysely
database: {
db: new Kysely({
dialect: new D1Dialect({
database: env.DB,
}),
plugins: [
// 关键: 如果使用snake_case的Drizzle模式则需要
new CamelCasePlugin(),
],
}),
type: sqlite,
},

emailAndPassword: {
enabled: true,
},

// ... 其他配置
});
}

为什么需要CamelCasePlugin?

如果你的Drizzle模式使用 snakecase 列名 (例如 emailverified), 但better-auth期望 camelCase (例如 emailVerified), CamelCasePlugin 会自动在两者之间转换。

⚠️ Cloudflare Workers 注意: D1数据库绑定仅在请求处理函数 (fetch() 函数) 内部可用。你不能在请求上下文之外初始化better-auth。请使用工厂函数模式:

typescript
// ❌ 错误 - 请求外部DB绑定不可用
const db = drizzle(env.DB, { schema }) // 此处env.DB不存在
export const auth = betterAuth({ database: drizzleAdapter(db, { provider: sqlite }) })

// ✅ 正确 - 每个请求创建auth实例
export default {
fetch(request, env, ctx) {
const db = drizzle(env.DB, { schema })
const auth = betterAuth({ database: drizzleAdapter(db, { provider: sqlite }) })
return auth.handler(request)
}
}

社区验证: 多个生产环境实现确认此模式 (Medium, AnswerOverflow, 官方Hono示例)。



框架集成

TanStack Start

⚠️ 关键: TanStack Start 需要 reactStartCookies 插件来正确处理cookie设置。

typescript
import { betterAuth } from better-auth;
import { drizzleAdapter } from better-auth/adapters/drizzle;
import { reactStartCookies } from better-auth/react-start;

export const auth = betterAuth({
database: drizzleAdapter(db, { provider: sqlite }),
plugins: [
twoFactor(),
organization(),
reactStartCookies(), // ⚠️ 必须是最后一个插件
],
});

为什么需要: TanStack Start 使用特殊的cookie处理系统。没有此插件, signInEmail() 和 signUpEmail() 等认证函数将无法正确设置cookie, 导致认证失败。

重要: reactStartCookies 插件必须是插件数组中的最后一个

会话可空性模式: 在TanStack Start中使用 useSession() 时, session对象始终存在, 但未登录时 session.user 和 session.session 为 null:

typescript
const { data: session } = authClient.useSession()

// 未登录时:
console.log(session) // { user: null, session: null }
console.log(!!session) // true (意外!)

// 正确检查:
if (session?.user) {
// 用户已登录
}

始终检查 session?.user 或 session?.session, 而不仅仅是 session。这是预期行为 (session对象容器始终存在)。

API路由设置 (/src/routes/api/auth/$.ts):
typescript
import { auth } from @/lib/auth
import { createFileRoute } from @tanstack/react-router

export const Route = createFileRoute(/api/auth/$)({
server: {
handlers: {
GET: ({ request }) => auth.handler(request),
POST: ({ request }) => auth.handler(request),
},
},
})

📚 官方文档: https://www.better-auth.com/docs/integrations/tanstack



可用插件 (v1.4+)

Better Auth 提供用于高级认证功能的插件:

插件导入路径描述文档
OAuth 2.1 提供者better-auth/plugins构建支持PKCE、JWT令牌、同意流程的OAuth 2.1提供者 (替代MCP和OIDC插件)📚
SSO
better-auth/plugins | 支持OIDC、OAuth2和SAML 2.0的企业单点登录 | 📚 |
| Stripe | better-auth/plugins | 灵活的支付和订阅管理 | 📚 |
| MCP | better-auth/plugins | ⚠️ 已弃用 - 请改用OAuth 2.1提供者 | 📚 |
| Expo | better-auth/expo | 支持 webBrowser

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 better-auth-1776376083 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 better-auth-1776376083 技能

通过命令行安装

skillhub install better-auth-1776376083

下载

⬇ 下载 better-auth v0.1.0(免费)

文件大小: 48.67 KB | 发布时间: 2026-4-17 15:50

v0.1.0 最新 2026-4-17 15:50
better-auth 0.1.0

- Initial release of better-auth: self-hosted authentication for TypeScript/Cloudflare Workers with social auth, 2FA, passkeys, organizations, RBAC, and plugin support.
- Supports Drizzle ORM or Kysely for database access on Cloudflare D1 (no direct adapter).
- Provides detailed guides on D1 adapter use, per-request initialization, and framework integration (TanStack Start).
- Includes extensive documentation on plugins, configuration patterns, and troubleshooting common issues.

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部