数据来源
评论存在站点的评论后端里,本页直接读同一份数据,因此这里看到的、以及在这里发的回复,
都与文章页面下的评论区是同一份内容。
写入身份
读取不需要凭据
当前身份:
站长令牌
部署评论后端时设置的那串令牌。本页把它作为 Authorization 头发给后端,
只存在这台设备的浏览器里,不会写进页面源码,也不会发给任何第三方。
⚠
这个页面是公开的静态页面,只靠「不知道站长令牌就写不了」来防护,因此
不要把令牌写进页面文件或分享链接。忘记退出时,点「退出登录」即可清掉本地保存的凭据。
令牌校验在后端完成(评论后端是自建的 Cloudflare Worker),前端拿不到任何可绕过的写权限。
回复时的署名
昵称要与你在评论区里惯用的名字一致(本站目前是“墨晓晓”),本页才能把“我发的评论”识别出来
(用于“待回复 / 我发的”筛选)。邮箱可留空;填了的话,前台会按邮箱取头像。
全部评论
行内操作:回复 会挂在这条评论下面(与前台评论区一致的父子关系);
编辑 / 删除 需要上面的写入权限。删除不可撤销,请谨慎操作。
先看一眼:评论区现在的开放程度
这个后端的评论类目当前是「所有人可读、所有人可写」。
我用该站公开的 appId / appKey 实测过:不需要任何登录就能新增一条评论,也能改、能删已经有评论,
包括删掉别人写的。也就是说,谁只要打开文章页看一下页面源码里的 appId / appKey,就能清空整个评论区。
要让评论区只读不写,去后端控制台把 Comment 类目的权限收一下即可(读写都改成「仅限拥有者」或指定角色),
改完之后刷新本页,本页的写入仍然可用——因为本页用的是 masterKey / 站长账号,不受类目权限限制。
已有的老评论本身没有逐条 ACL,收回类目权限后才能一并受保护。
说明
这个页面能做什么
- 一处看全:把所有文章下的评论按文章分组列出,按时间倒序;筛选按钮可只看「待回复 / 上次之后新增 / 我发的」。
- 二级回复:点任意一条评论的「回复」,写下的内容会作为它的子评论写回后端,与前台的评论插件是同一份数据, 刷新文章页就能看到(回复会自动带上 @对方昵称,与前台插件的习惯一致)。
- 编辑 / 删除:作为站长给自己收拾烂摊子的手段;删除会连同它的下级回复一起删。
- 不漏新评论:每次打开会把上次的时间点存下来,之后新出现的评论会高亮并计入「上次之后新增」, 这样就不必靠别人通知你。
- 回复身份:昵称 / 邮箱 / 网站三项保存在你自己的浏览器里,发回复时一起写上,前台看到的署名与头像就是你。
关于“不会主动通知我”
静态博客本身没有后端,所以做不到真正的推送通知;本页的办法是「一眼看出有没有新评论」: 打开即有醒目的新评论高亮与计数,配合上面的筛选,几秒钟就能确认有没有人留言。 如果还想更主动一点,可以再让后端服务在收到新评论时发一封邮件(需要在该服务控制台里配置触发器和邮件模板), 那属于服务端配置,与这个页面无关。
写入权限与安全
- 读取全部评论不需要登录——这也是为什么文章页的评论任何访客都能看到。
- 写入(回复 / 编辑 / 删除)必须给出凭据:masterKey(控制台里的应用主密钥)或后端账号登录后的会话。
- masterKey 只在请求时用于计算签名,默认只留在内存;勾选“记住这台设备”才会写进浏览器本地存储(明文可读,公用电脑不要勾)。
- 凭据一旦失效(改过密码 / 密钥、会话过期),本页会自动切回只读并给出提示。
实现细节(点开)
- 数据来自评论插件的 REST 接口
/1.1/classes/Comment,接口域名用的是插件自身实际请求的那一个, 所以不需要额外后端、也不需要改站点配置。 - 一次最多取回 3000 条,超过会分批拉取;「后端总数」显示的是后端记录的条数,两个数字不一致就说明还有没取回的部分。
- masterKey 走
X-LC-Sign(HMAC-SHA1)签名;账号登录走X-LC-Session,两条路都能写。 - 评论内容按纯文本渲染(转义后再高亮 @提及、网址、反引号代码),避免把后端里的内容当成 HTML 执行。
- 页头与正文里的文章链接由构建时的文章列表生成;评论里出现旧路径(例如带子目录前缀的)会做一次兼容处理, 匹配不上就标成“旧链接 / 无对应文章”。
- 文章路径与标题的对照表(
js/post-map.js)是自动生成的:新写了一篇文章、并且它收到第一条评论之后, 想让它显示标题而不是路径,就在博客目录里跑一次npx hexo generate && node tools-scripts/gen-post-map.js && npx hexo generate。 - 本地存储只用于你自己的偏好与凭据:
cmt-*开头的几个键,清空浏览器数据即可全部复位。
已知限制
- 没有删除之外的管理动作:不能置顶、不能标记垃圾、不能封禁某人(这些后端支持但本页没做)。
- 不能导出备份。真要动手删评论,建议先用浏览器开发者工具或本页上方数据来源里的接口自己抓一份 JSON 存档。
- 回复用的是你当前浏览器,不会伪装成访客;评论里的 IP、UA 之类字段沿用前台插件的记录方式。
- 本页不放进站内导航,也不被搜索引擎收录(页面里已声明 noindex),需要时直接把它加进收藏夹。