认证系统
使用 InsForge Auth 构建用户认证
HackerStart 使用 InsForge Auth 作为认证方案,集成在 src/auth/server.ts 中。
认证功能
- 邮箱密码注册/登录
- 密码重置(邮件验证码)
- Session 管理(TanStack Start session)
- 多工作区切换
环境变量
# InsForge SDK
INSFORGE_URL=http://localhost:8000
INSFORGE_ANON_KEY=your-anon-key
INSFORGE_API_KEY=your-api-key
# Session 加密密钥(至少 32 字符)
SESSION_SECRET=openssl rand -base64 32核心 API
注册
import { signUp } from '@/auth/server'
// 通过 createServerFn 调用
const result = await signUp({ data: { email, password, name } })注册成功后会自动创建默认工作区并写入 session。
登录
import { signIn } from '@/auth/server'
const result = await signIn({ data: { email, password } })密码重置
- 发送重置邮件:
requestPasswordReset({ data: { email, redirectTo } }) - 验证并重置:
resetPassword({ data: { code, newPassword } })
获取当前用户
import { getAppSession } from '@/auth/session'
const session = await getAppSession()
const data = session.data
// { userId, email, name, activeTenantId }路由保护
使用 TanStack Router 的 beforeLoad 进行路由守卫:
// src/routes/_authenticated.tsx
export const Route = createFileRoute('/_authenticated')({
beforeLoad: async ({ context }) => {
if (!context.session?.userId) {
throw redirect({ to: '/_auth/login' })
}
},
})Session 架构
Session 数据存储在加密 cookie 中:
| 字段 | 说明 |
|---|---|
userId | InsForge 用户 ID |
email | 用户邮箱 |
name | 用户名 |
activeTenantId | 当前活跃工作区 ID |