惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
爱范儿
爱范儿
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园_首页
博客园 - 叶小钗
酷 壳 – CoolShell
酷 壳 – CoolShell
Apple Machine Learning Research
Apple Machine Learning Research
云风的 BLOG
云风的 BLOG
量子位
博客园 - 三生石上(FineUI控件)
Stack Overflow Blog
Stack Overflow Blog
小众软件
小众软件
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
V2EX
人人都是产品经理
人人都是产品经理
V
Visual Studio Blog
Jina AI
Jina AI
L
LangChain Blog
M
MIT News - Artificial intelligence
MongoDB | Blog
MongoDB | Blog
Last Week in AI
Last Week in AI
Martin Fowler
Martin Fowler
WordPress大学
WordPress大学

Haku

克兰奇杀妻案 | Haku DIVING INTO HK | Haku 无能的 DeepSeek 不会安装 Neovim 插件 | Haku 试图使用 Ungoogled Chromium | Haku 屋漏偏逢连夜雨 | Haku 石油障碍症 | Haku 好玩,大数据杀熟 | Haku 被忽略的问题 | Haku 给 Waline 做自己的通知邮箱! | Haku 排版的艺术:一条很长很长的路 | Haku 最近我在干些什么还有聊天还有一个久违的双休 | Haku 各 Markdown 编辑器的使用体验 | Haku Astro 解决代码块的文件名重叠,附带测试工程师笑话 | Haku 简单记一记如何解决切换主题时的明暗闪烁 | Haku 分析一段精妙的地球 JavaScript 代码 | Haku 程序设计#5 - 二分查找 | Haku 程序设计#4 SP 接雨水的四种解法 | Haku 一个让在 UVa 写题目更方便的 VSCode 设置 | Haku 程序设计#4%2 - 【经典算法】双指针和滑动窗口·第三部分 | Haku 程序设计#4%1 - 【经典算法】双指针和滑动窗口·第二部分 | Haku 让你的 VS Code 也能写 C++ | Haku 我对各种字体的看法(Go 语言版) | Haku 程序设计#4 - 【经典算法】双指针和滑动窗口·第一部分 | Haku 大半夜听了寂静岭之后 | Haku 程序设计#3%2 - 算法的复杂度 | Haku 程序设计#3%1 - 面向对象程序设计 | Haku 程序设计#3 - 结构体和数据结构入门 | Haku 程序设计#2 - 序列入门和缓冲输入输出 | Haku 程序设计#1 - 流程控制 | Haku 程序设计#0 - 前期准备 | Haku
给 Waline 前端加了人机验证 | Haku
Karlbaey · 2026-05-17 · via Haku
← 返回首页

发布于 2026年5月17日 11:26 作者 Karlbaey

Turnstile 其实就是一个 Cloudflare 做的人机验证小组件。

长这样
长这样

前些时日换了 Sodesu 作为 Waline 的评论前端,体验很好,的确是符合文档里写的体积极小。但是在部分场景,比如我的博客,遇到人机验证就麻烦大了。有一位读者发评论表示(通过 Giscus 发的):

_image

虽然可以通过登录来规避,但是因为 Waline 调用的是外部的 OAuth 服务(oauth.lithub.cc),保密性不够好;再说,有些人用 GitHub 登录,用户界面是 GitHub 提供的隐私邮箱1,连回复都收不到邮件。

究其原因还是 Sodesu 前端为了尽可能精简,没有做 Turnstile 的功能。也好办,我自己复刻一份仓库实现一个就成。仓库名也很直接:SFH (Sodesu for Haku),而在 npm 上,它的包名为 @karlbaey/sodesu-for-haku

自己的修改

本来就没想过有人会用,就瞎糊了一点。

最主要的修改在于 src/components/CommentBoxFooter.tsx,里面加了几个状态监控,就可以接上 Cloudflare 了。不太懂 UnoCSS,还是用的 Tailwind CSS 的原子类。

Turnstile 在这里申请。

改到 0.1.0 版本之后发现人机验证一加载页面就跳出来了,因此还在 0.2.0 版本把行为改成了按下提交按钮后才触发人机验证。

关于博客主题,在提交 730e071bbd2b02cec52b46b66d20000b64249e60 里面有完整的修改记录。

引入

本来没打算扔到 npm 上。但是后来为了用 jsDelivr CDN 还是这么做了。

首先就是老生常谈的 DNS 污染问题。cdn.jsdelivr.net 换成 cdn.jsdmirror.com 解决大部分问题。

我的 Hugo 主题托管在 Karlbaey/Haku 上,只要改几个域名跟路径就行。

assets/js/comments.js
-  const SODESU_SCRIPT_SRC = "https://cdn.jsdelivr.net/npm/[email protected]/dist/sodesu.aio.umd.js";
+  const SODESU_SCRIPT_SRC = "https://cdn.jsdmirror.com/npm/@karlbaey/sodesu-for-haku@latest/dist/sodesu.aio.umd.js";
layouts/_default/single.html
-    <link rel="stylesheet" href="https://gcore.jsdelivr.net/npm/[email protected]/dist/sodesu-comment.css" />
-    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism-themes/1.9.0/prism-material-dark.min.css" />
+    <link rel="stylesheet" href="https://cdn.jsdmirror.com/npm/@karlbaey/sodesu-for-haku@latest/dist/sodesu-for-haku.css" />
+    <link rel="stylesheet" href="https://mirrors.sustech.edu.cn/cdnjs/ajax/libs/prism-themes/1.9.0/prism-material-dark.min.css" />

这样就可行了。