Auth 系统速通 — 零后端 + 反爬虫 + 不用微信 300/年
· · ·
给 agquant.com/learning/ 的实战方案:不写后端、不被脚本注册、便宜到不肉疼、不用微信年费。
题目进度 0 / 0 ✓ 0
这课回答 3 个问题:
- 用哪个 Auth 服务?Clerk vs Supabase vs Auth0 vs Firebase vs 自建,5 选 1
- 怎么 反爬虫/脚本注册?(Cloudflare Turnstile + 临时邮箱黑名单 + Rate limit)
- 微信 300/年 替代方案?能用啥?
**预计时间:**45 分钟。
视角
agquant.com/learning/ = 静态站部署在 CF 边缘,无后端进程。必须用零后端 Auth 服务,不能自己写 auth server(成本太高)。
一、5 选 1 决策表
| 服务 | 免费档 | 过 1 万 MAU 多少钱 | 中国可用? | 社交登录 | 适合 agquant.com |
|---|---|---|---|---|---|
| Clerk | 10K MAU 免费 | $25/月 (Pro) | ✅(CF 集成好) | Google/GitHub/微信/QQ | ⭐ 首选 |
| Supabase Auth | 50K MAU 免费 | $25/月 | ✅ | Google/GitHub/Apple/手机 | ⭐ 备选(想自托管数据) |
| Auth0 | 7K 用户 | $23/月起 | ✅ | 最全 | 企业级贵 |
| Firebase Auth | 50K 免费 | $0.0055/用户 | ⚠️ Google 服务,中国可能不稳 | Google/手机 | 中国用户不友好 |
| Logto | 5K MAU | $32/月 | ✅ OSS | 全 | 想 OSS 选这个 |
agquant.com 推荐:Clerk
- 10K MAU 免费档 = 99% 你的站都到不了这数
- CF Workers / Pages 集成原生支持,5 分钟接入
- Turnstile 自带集成(少装一个依赖)
- Dashboard 漂亮,非技术 founder 也能管用户
- 过 10K → $25/月,比自建便宜
二、Clerk 实战接入(5 分钟)
2.1 注册 + 创建 Application
- 访问 [clerk.com](https://clerk.com) → 注册(GitHub 登录最快)
- Create Application → 选 Email + Google + GitHub + 微信 + QQ
- 复制 Publishable Key 和 Secret Key
2.2 CF Pages / Workers 集成
// agquant.com/learning/ 静态站:直接在 <head> 插入 Clerk SDK
<script
async
crossorigin="anonymous"
data-clerk-publishable-key="pk_test_xxxxxxxxxxx"
src="https://cdn.jsdelivr.net/npm/@clerk/clerk-js@latest/dist/clerk.browser.js"
>
</script>
// 在每个需要 auth 的页面
<div id="sign-in"></div>
<div id="user-button"></div>
<script>
window.addEventListener("load", async () => {
const Clerk = window.Clerk;
await Clerk.load();
if (Clerk.user) {
document.getElementById("sign-in").innerHTML = "";
document.getElementById("user-button").innerHTML = `
<img src="${Clerk.user.imageUrl}" />
<span>${Clerk.user.firstName}</span>
<button onclick="Clerk.signOut()">登出</button>
`;
} else {
document.getElementById("sign-in").innerHTML = `
<button onclick="Clerk.openSignIn()">登录 / 注册</button>
`;
}
});
</script>
2.3 受保护内容(付费课程)
// 检查是否登录 + 角色
if (!Clerk.user) {
window.location.href = "/sign-in";
return;
}
if (Clerk.user.publicMetadata.role !== "premium") {
document.getElementById("content").innerHTML = `
<p>这是付费内容。<a href="/upgrade">升级到 Premium →</a></p>
`;
}
三、反爬虫/反脚本注册(最关键)
Clerk 默认 不带 CAPTCHA,单纯靠 email 验证 → 一定被批量注册。必须加 3 层防护:
3.1 第 1 层:Cloudflare Turnstile(必备)
<!-- 在注册表单前加 Turnstile -->
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
<form id="signup-form">
<input id="email" type="email" placeholder="邮箱">
<div class="cf-turnstile"
data-sitekey="0x4AAAAAAA_your_site_key"
data-callback="onTurnstileSuccess"></div>
<button type="submit">注册</button>
</form>
<script>
let turnstileToken = null;
function onTurnstileSuccess(token) { turnstileToken = token; }
document.getElementById("signup-form").addEventListener("submit", async (e) => {
e.preventDefault();
if (!turnstileToken) { alert("请先完成验证"); return; }
// 把 turnstileToken 发到你的后端 / Clerk Webhook
// Clerk 后端验证:https://challenges.cloudflare.com/turnstile/v0/siteverify
});
</script>
3.2 第 2 层:临时邮箱黑名单
// 注册时验证邮箱域名
const DISPOSABLE_DOMAINS = [
'tempmail.com', 'guerrillamail.com', '10minutemail.com',
'mailinator.com', 'yopmail.com', 'trashmail.com',
// ... 200+ 个(GitHub 上有公开 list)
];
function isValidEmail(email) {
const domain = email.split('@')[1].toLowerCase();
return !DISPOSABLE_DOMAINS.includes(domain);
}
// 推荐用现成 list:
// https://github.com/disposable-email-domains/disposable-email-domains
// https://github.com/andreis/disposable-email-domains(5000+ 个)
效果:挡掉 95% 的脚本注册(脚本默认用临时邮箱)。
3.3 第 3 层:CF Rate Limiting Rules
CF Dashboard → Security → WAF → Rate limiting rules → Create rule
Rule: 注册接口限流
- Expression: (http.request.uri.path eq "/api/signup")
- Action: Block
- Characteristics: IP
- Requests: 5
- Period: 10 minutes
- Mitigation timeout: 1 hour
效果:同一个 IP 10 分钟内最多 5 次注册尝试 → 脚本爆注册被拦。
3.4 第 4 层(可选):Bot Management
CF Dashboard → Security → Bots → Bot Management → Enabled
价格:$10/月(域名级)
CF 用机器学习判断”是不是 bot”——比 Turnstile 更准,0 用户感知。但 5K MAU 阶段不值得。
3.5 第 5 层(终极):device fingerprinting
// 用 open-source 库:https://github.com/fingerprintjs/fingerprintjs
import FingerprintJS from '@fingerprintjs/fingerprintjs';
const fp = await FingerprintJS.load();
const result = await fp.get();
const visitorId = result.visitorId; // 唯一 ID(不依赖 cookie)
// 发到后端,跟 IP 一起判断"是否同一个真用户"
高价值场景再用(付费内容)。一般 Turnstile + 邮箱黑名单 + Rate limit 就够。
四、微信 300/年的替代方案(4 个选项)
| 方案 | 费用 | 适合谁 | 用户体验 |
|---|---|---|---|
| QQ 互联 | 免费 | 必须有 QQ 的中国用户 | ⭐⭐⭐⭐ |
| 支付宝 | 免费 | 中国 B2C / 支付场景 | ⭐⭐⭐⭐ |
| 邮箱魔法链接 | 免费(Resend 3K/月) | 通用,技术用户 | ⭐⭐⭐ |
| 手机号 + 阿里云 SMS | 0.045 RMB/条 | 高转化场景(金融) | ⭐⭐⭐⭐⭐ |
| Apple ID 登录 | 免费 | iPhone 用户 | ⭐⭐⭐⭐ |
| 微信 | 300/年 | 必装(中国 B2C 标配) | ⭐⭐⭐⭐⭐ |
4.1 推荐组合(agquant.com 实战)
Layer 1 (默认): 邮箱魔法链接(Resend / Postmark)
Layer 2 (提升): Google / GitHub OAuth
Layer 3 (中国): QQ + 支付宝
Layer 4 (金融场景): 手机号(阿里云 SMS,敏感操作才用)
Layer 5 (终极): 微信(300/年,等流量起来再加)
4.2 邮箱魔法链接(最低成本)
<!-- 5 行代码实现 -->
<form id="magic-form">
<input id="email" type="email" placeholder="输入邮箱" required>
<div class="cf-turnstile" data-sitekey="0x4AAAAAAA_your_key"></div>
<button type="submit">发魔法链接到邮箱</button>
</form>
<script>
document.getElementById("magic-form").addEventListener("submit", async (e) => {
e.preventDefault();
const email = document.getElementById("email").value;
const turnstileToken = document.querySelector('[name="cf-turnstile-response"]').value;
// 用 Clerk 的 signIn.createMagicLinkFlow(不需要后端)
const res = await fetch("/api/auth/magic-link", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ email, turnstileToken })
});
if (res.ok) {
alert("检查邮箱!");
} else {
alert("失败:邮箱无效 / 临时邮箱 / IP 被限流");
}
});
</script>
4.3 手机号 + 阿里云 SMS(金融场景必备)
金融场景(agquant.com)必须加手机号验证——邮箱容易被绕:
// 前端:发手机号 → 收短信验证码
const res = await fetch("/api/auth/sms", {
method: "POST",
body: JSON.stringify({ phone: "+8613800000000" })
});
// 后端(CF Workers)调阿里云 SMS API
// 价格:0.045 RMB/条(中国),0.10 USD/条(国际)
CF Workers 调阿里云 SMS:
// workers/auth-sms.ts
export default {
async fetch(req: Request, env: Env) {
const { phone } = await req.json();
const code = Math.floor(100000 + Math.random() * 900000);
// 调阿里云 SMS API(带签名)
const smsRes = await signAndSendSms(phone, code, env);
return Response.json({ ok: smsRes.ok });
}
};
4.4 微信 300/年到底要不要花?
决策树:
你的用户是?
├── 100% 中国大陆 B2C
│ └── 月活 > 1K 就有 ROI → 装
├── 中国 + 全球化
│ └── 先不装(QQ + 邮箱 + Google 够用)
└── 100% 海外
└── 完全不需要
agquant.com = 金融学习站,中国用户为主,但不是 B2C 交易。建议:
- 前期(< 1K 用户):不装微信
- 中期(1K-10K):看用户反馈,要不要加
- 后期(> 10K):300/年完全付得起
五、完整推荐方案(agquant.com 实战)
┌────────────────────────────────────────┐
│ 5 选 1:Clerk ✓ │
│ 免费档:10K MAU │
│ 集成:5 行 HTML + Clerk JS SDK │
└────────────────────────────────────────┘
↓
┌────────────────────────────────────────┐
│ 反爬虫:4 层防护 │
│ 1. Turnstile (CF 免费) │
│ 2. 临时邮箱黑名单 (开源 list) │
│ 3. CF Rate Limiting (免费) │
│ 4. CF Bot Management ($10/月,可选) │
└────────────────────────────────────────┘
↓
┌────────────────────────────────────────┐
│ 登录方式:5 选 4 │
│ 1. 邮箱魔法链接 (Resend 免费档 3K/月)│
│ 2. Google OAuth (免费) │
│ 3. GitHub OAuth (免费,技术用户) │
│ 4. QQ 互联 (免费,中国用户) │
│ 可选:5. 微信 (300/年,后期) │
│ 可选:6. 手机号 (阿里云 0.045/条) │
└────────────────────────────────────────┘
↓
┌────────────────────────────────────────┐
│ 月成本: │
│ - 1K 用户: $0 │
│ - 10K 用户: $0 │
│ - 50K 用户: $25 (Clerk Pro) │
│ - 100K 用户: $99 (Clerk Pro + SMS) │
└────────────────────────────────────────┘
六、Clerk 完整配置(5 分钟)
6.1 Enable SSO Providers
Clerk Dashboard → SSO Connections → Add connection
✓ Google (免费,10 秒配置)
✓ GitHub (免费)
✓ Microsoft (免费)
✓ Apple (免费)
✓ WeChat (300/年,这里选不装)
✓ QQ (免费)
6.2 Enable Social Connections
User & Authentication → Social Connections
✓ Google
✓ GitHub
✓ Apple
6.3 Set up Email
User & Authentication → Email, Phone, Username
✓ Email address (required) // 邮箱魔法链接
✓ Password // 不开
关键:只开邮箱魔法链接,不开密码——这样:
- 用户不用记密码(密码是安全漏洞主因)
- Magic link 24h 过期,安全
- 减少 30% 注册流失(不需要打密码)
6.4 配置 Turnstile 集成
Clerk Dashboard → Attack Protection → Bot Signup Protection
✓ Enable Bot Signup Protection (Turnstile)
→ 用 CF 同一个 site key 即可
七、自建 vs 托管服务:决策
| 维度 | 托管(Clerk) | 自建(Better-Auth) |
|---|---|---|
| 开发时间 | 5 分钟 | 5 天 |
| 免费档 | 10K MAU | 无限(但要付 CF Workers 费) |
| 维护成本 | 0 | 你自己 |
| 安全更新 | Clerk 团队 | 你自己 |
| UI 自定义 | 中等(Clerk Components) | 完全自由 |
| 数据主权 | Clerk 拥有 | 你拥有 |
| 依赖性 | 锁定 Clerk | 锁定 D1/CF |
1
对 agquant.com 最推荐的 Auth 服务?
2
反爬虫必加的 3 层防护是?
3
微信开放平台 个人开发者 年费?
4
微信免费替代(中国用户)?
5
Cloudflare Turnstile 跟 reCAPTCHA 比?
6
Clerk 默认开启密码登录吗?
7
阿里云 SMS 单条费用(中国大陆)?
8
CF Rate Limiting Rules 怎么设?
9
agquant.com 1K MAU 时 Auth 月成本?
10
Better-Auth 自建方案数据存哪?
**下一步:**看 extensions-cf-ai-rag.md — Workers AI + Vectorize 零后端 RAG。