文章加密
并非所有文章都适合公开。开发日志、私人笔记、会员专属内容等场景需要密码保护。Lumin Blog 的文章加密功能支持为单篇文章设置阅读密码,实现前后端双重校验。
Front Matter 配置
在文章头部设置密码:
1---
2title: "加密文章示例"
3password: "your-secret-key"
4---
前端加密验证
当访问加密文章时,页面显示密码输入框而非文章内容。密码通过 SHA-256 哈希后与预存储的哈希值比对:
1async function verifyPassword(input, storedHash) {
2 const encoder = new TextEncoder();
3 const data = encoder.encode(input);
4 const hashBuffer = await crypto.subtle.digest('SHA-256', data);
5 const hashArray = Array.from(new Uint8Array(hashBuffer));
6 const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
7 return hashHex === storedHash;
8}
验证通过后,前端使用获取到的解密密钥渲染文章内容。
安全考量
- 绝不将明文密码写入前端代码:密码通过后端 API 预哈希存储
- 使用 Crypto API:浏览器原生 Web Crypto API,无需第三方加密库
- 双重验证:前端做首次验证 + 后端 API 做二次校验,防止绕过
- 限流防爆破:后端 API 限制密码尝试频率
使用建议
| 建议 | 说明 |
|---|---|
| 密码复杂度 | 建议 8 位以上,包含大小写字母、数字、特殊字符 |
| 定期更换 | 不建议长期使用同一密码 |
| 不要复用 | 不同文章使用不同密码 |
| 避免明文 | 绝不在 URL 参数或前端变量中暴露密码 |
定时发布
定时发布允许提前写好文章,设置未来某个时间点自动发布。适合假期预设文章、连载内容定时更新等场景。
工作原理
- Hugo 构建时检查文章的
date字段 - 默认情况下,未来日期的文章不会发布(被视为草稿)
- Cloudflare Pages 等部署平台支持定时构建触发
Hugo 配置
Hugo 默认只发布日期小于等于当前时间的文章。可以强制发布未来文章:
1# 本地预览未来文章
2hugo server --buildFuture
3
4# 生产构建包含未来文章
5hugo --buildFuture
Front Matter 配置
1---
2title: "定时发布的文章"
3date: 2026-06-01T08:00:00+08:00
4draft: false
5---
自动部署策略
在 Cloudflare Pages 等平台配置定时构建:
| 方式 | 说明 |
|---|---|
| Deploy Hooks | Cloudflare Pages 提供 Deploy Hook URL,可通过外部 cron 服务定时触发 |
| GitHub Actions | 配置 schedule 定时推送或触发 Webhook |
| 第三方 Cron 服务 | 使用 cron-job.org 等免费服务定时请求 Deploy Hook |
每次定时构建会检查所有文章,date ≤ now() 的文章自动变为可见。
建议工作流
- 提前写作:周末写好下周的文章
- 设置日期:将
date设为目标发布日期 - 定期构建:每天凌晨自动触发一次 Hugo 构建和部署
- 文章自动上线:到达预定日期后,文章在下次构建时自动发布
两个功能的协同
加密和定时发布可以组合使用。例如:为付费会员提前写好专属文章,设定为未来日期 + 加密保护,在会员日当天自动解密发布。
留言评论
期待你的想法评论加载中