身份认证
基于 better-auth 的内置认证系统,支持邮箱密码登录、OAuth 社交登录、邮箱验证和验证码保护
VibeAny 使用 better-auth 作为认证框架,会话数据存储在 PostgreSQL 中。认证是可选的——如果未配置 DATABASE_URL 和 BETTER_AUTH_SECRET,应用将以静态模式运行,不包含用户登录功能。
前置条件
在配置认证之前,请确保已完成:
快速开始
配置邮件服务
邮箱验证默认关闭,需要配置邮件服务以便用户完成账号验证:
EMAIL_VERIFICATION_ENABLED=false
EMAIL_PROVIDER=resend
EMAIL_FROM="YourApp <[email protected]>"
RESEND_API_KEY=re_xxx或配置自定义 SMTP 服务器:
EMAIL_PROVIDER=custom
EMAIL_FROM="YourApp <[email protected]>"
EMAIL_HOST=smtp.example.com
EMAIL_ADDRESS=[email protected]
EMAIL_USER=your-username
EMAIL_PASSWORD=your-password验证
启动开发服务器,访问登录页面,应该能看到邮箱密码注册表单。
邮箱密码认证
邮箱密码登录默认开启,流程如下:
- 用户使用邮箱和密码注册
- 系统自动发送验证邮件
- 用户点击验证链接
- 账号验证完成,自动登录
提示
邮箱验证是必需的——用户在完成邮箱验证之前无法登录。
OAuth 社交登录
VibeAny 支持 GitHub 和 Google 作为 OAuth 登录方式。配置对应的环境变量后会自动启用。
GitHub
创建 OAuth 应用
前往 GitHub Developer Settings → OAuth Apps → New OAuth App。
回调 URL 填写:
https://your-domain.com/api/auth/callback/github本地开发环境:
http://localhost:3377/api/auth/callback/github配置环境变量
将 Client ID 和 Client Secret 复制到 .env:
GITHUB_CLIENT_ID=your-client-id
GITHUB_CLIENT_SECRET=your-client-secret创建 OAuth 凭据
前往 Google Cloud Console → 创建凭据 → OAuth 客户端 ID。
应用类型选择 Web 应用,添加已授权的重定向 URI:
https://your-domain.com/api/auth/callback/google本地开发环境:
http://localhost:3377/api/auth/callback/google配置环境变量
将 Client ID 和 Client Secret 复制到 .env:
GOOGLE_CLIENT_ID=your-client-id
GOOGLE_CLIENT_SECRET=your-client-secret提示
OAuth 登录是可选的。登录页面会根据环境变量是否配置,自动显示或隐藏对应的社交登录按钮。
验证码保护
VibeAny 支持 Cloudflare Turnstile 来保护登录、注册和 OAuth 流程,防止机器人攻击。
创建 Turnstile 小组件
前往 Cloudflare Dashboard → Turnstile → 添加小组件。添加你的域名,获取 Site Key 和 Secret Key。
配置环境变量
VITE_TURNSTILE_CAPTCHA_ENABLED=true
VITE_TURNSTILE_SITE_KEY=0x4xxx
TURNSTILE_SECRET_KEY=0x4xxx管理员访问
管理员用户可以访问后台管理面板,管理用户、支付、积分和配置。
将用户的邮箱添加到 ADMIN_EMAILS 环境变量即可授予管理员权限:
ADMIN_EMAILS=[email protected],[email protected]多个邮箱用英文逗号分隔。
配置参考
| 环境变量 | 必填 | 说明 |
|---|---|---|
BETTER_AUTH_SECRET | 是 | 认证加密密钥 |
DATABASE_URL | 是 | PostgreSQL 连接地址 |
ADMIN_EMAILS | 否 | 管理员邮箱,多个用逗号分隔 |
GITHUB_CLIENT_ID | 否 | GitHub OAuth Client ID |
GITHUB_CLIENT_SECRET | 否 | GitHub OAuth Client Secret |
GOOGLE_CLIENT_ID | 否 | Google OAuth Client ID |
GOOGLE_CLIENT_SECRET | 否 | Google OAuth Client Secret |
VITE_TURNSTILE_CAPTCHA_ENABLED | 否 | 启用 Turnstile 验证码(true/false) |
VITE_TURNSTILE_SITE_KEY | 否 | Turnstile Site Key |
TURNSTILE_SECRET_KEY | 否 | Turnstile Secret Key |
数据库表
认证系统会自动创建以下数据库表:
| 表名 | 说明 |
|---|---|
user | 用户信息(名称、邮箱、头像等) |
session | 活跃会话,包含令牌和过期时间 |
account | 关联的认证方式(邮箱密码、GitHub、Google) |
verification | 邮箱验证令牌 |