Learning
VOL. XIII · NO. 15 · Elixir · 01 JAN 1970

Auth 系统速通 — 零后端 + 反爬虫 + 不用微信 300/年

Elixir 编程 · 01 JAN 1970 · 10 min read · 1,265 words
· · ·

给 agquant.com/learning/ 的实战方案:不写后端、不被脚本注册、便宜到不肉疼、不用微信年费。

这课回答 3 个问题:

  1. 用哪个 Auth 服务?Clerk vs Supabase vs Auth0 vs Firebase vs 自建,5 选 1
  2. 怎么 反爬虫/脚本注册?(Cloudflare Turnstile + 临时邮箱黑名单 + Rate limit)
  3. 微信 300/年 替代方案?能用啥?

**预计时间:**45 分钟。

视角
agquant.com/learning/ = 静态站部署在 CF 边缘,无后端进程。必须用零后端 Auth 服务,不能自己写 auth server(成本太高)。

一、5 选 1 决策表

服务免费档过 1 万 MAU 多少钱中国可用?社交登录适合 agquant.com
Clerk10K MAU 免费$25/月 (Pro)✅(CF 集成好)Google/GitHub/微信/QQ⭐ 首选
Supabase Auth50K MAU 免费$25/月Google/GitHub/Apple/手机⭐ 备选(想自托管数据)
Auth07K 用户$23/月起最全企业级贵
Firebase Auth50K 免费$0.0055/用户⚠️ Google 服务,中国可能不稳Google/手机中国用户不友好
Logto5K MAU$32/月✅ OSS想 OSS 选这个
agquant.com 推荐:Clerk
  • 10K MAU 免费档 = 99% 你的站都到不了这数
  • CF Workers / Pages 集成原生支持,5 分钟接入
  • Turnstile 自带集成(少装一个依赖)
  • Dashboard 漂亮,非技术 founder 也能管用户
  • 过 10K → $25/月,比自建便宜

二、Clerk 实战接入(5 分钟)

2.1 注册 + 创建 Application

  1. 访问 [clerk.com](https://clerk.com) → 注册(GitHub 登录最快)
  2. Create Application → 选 Email + Google + GitHub + 微信 + QQ
  3. 复制 Publishable KeySecret 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/月)通用,技术用户⭐⭐⭐
手机号 + 阿里云 SMS0.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。