如何给自己的博客文章私密

第一步

安装开源插件

npm install --save hexo-blog-encrypt

安装完成后,在package.json文件的dependecies依赖中可以看到encrypt插件,证明安装成功

第二步

配置hexo中的_config.yml文件,在文件末尾添加如下代码

# 安全设置
encrypt:
# 启用插件
enable: true
# 自定义加密相关设置
abstract: "这里的内容加密了,需要密码哦。"
message: "请输入密码查看本文。"
# 可以在这里设定特定标签对应的默认密码
tags:
- [name: "encryptAsSecret", password: "yoursecret"]
# 错误消息设置
wrong_pass_message: "密码错误,请重试。"
wrong_hash_message: "内容认证失败,但仍可尝试查看。"
# 是否禁用日志记录
silent: false

配置项说明:

  • enable: 是否启用加密功能,设置为 true 启用。
  • abstract: 加密文章的摘要,显示在文章列表页。
  • message: 密码输入框上方的描述性文字。
  • tags: 标签配置,可以为不同标签设置不同的密码。
  • wrong_pass_message: 密码错误时的提示信息。
  • wrong_hash_message: 解密内容无法验证时的提示信息。

第三步

使用

在需要加密文章的YAML头部添加如下设置:

---
title: ###
date: XXXX-XX-XX XX:XX:XX
password: mima 如果设为""则为空
abstract: 这里有东西被加密了,需要输入密码查看哦。
message: 您好,这里需要密码。
wrong_pass_message: 抱歉,这个密码看着不太对,请再试试。
wrong_hash_message: 抱歉,这个文章不能被纠正,不过您还是能看看解密后的内容
---

如果想让自己每次都输密码的话

出现 “正确输入一次密码后,后续访问无需再输” 的情况,核心原因是 hexo-blog-encrypt 插件默认开启了 “密码本地记忆功能”—— 它会将正确密码存储在浏览器的 localStorage 中(一种本地持久化存储机制,不会随页面关闭或浏览器重启消失),下次访问时自动读取验证,从而跳过输入步骤。以下详细解释原理,并提供 “取消自动记忆、每次强制输入密码” 的解决方案:

一、为什么会 “一直能进”?密码存在哪里了?

hexo-blog-encrypt 插件为提升用户体验,设计了 密码本地缓存逻辑,具体原理如下(结合摘要 1、4、6 的核心特性):

  1. 存储位置:正确输入密码后,插件会将 “加密文章标识 + 正确密码(或密码的加密哈希值)” 存储到浏览器的 localStorage 中(不同浏览器通用,如 Chrome、Edge、Safari 均支持);
  2. 自动验证:下次访问该加密文章时,插件会先检查浏览器 localStorage 中是否存在该文章的有效密码记录;
  3. 跳过输入:若记录存在且验证有效,插件会自动解密文章内容,无需再次输入密码;
  4. 持久化特性localStorage 的数据默认会一直保留(除非手动删除或通过代码清除),因此即使关闭浏览器、重启电脑,下次访问仍会 “自动通过验证”。

二、如何实现 “每次访问都必须输入密码”?(3 种方案)

若需要取消自动记忆、强制每次访问都输入密码,可根据需求选择以下方案,核心思路是 “禁用插件的本地存储逻辑” 或 “主动清除存储的密码”:

方案 1:全局配置(所有加密文章均取消自动记忆)

在博客根目录的 _config.yml 中,给 hexo-blog-encrypt 插件添加 disableLocalStorage: true 配置,全局禁用密码本地存储功能,所有加密文章每次访问都需输入密码:

# 博客根目录 _config.yml
encrypt:
enable: true
abstract: "本文已加密,输入正确密码即可查看全文~"
message: "您好!访问此文章需验证密码"
wrong_pass_message: "密码错误,请再试一次~"
# 新增:禁用密码本地记忆,每次访问都需输入
disableLocalStorage: true # 关键配置,开启后不存储密码到localStorage
# 其他原有配置(如tags、theme等)保持不变

配置后需执行 hexo clean && hexo g && hexo s 重新生成博客,本地预览验证效果,再部署到线上。

方案 2:单篇文章配置(仅指定文章取消自动记忆)

若只想让某篇加密文章每次都输入密码(其他文章保持记忆功能),可在该文章的 Front-matter 头部 单独添加 disableLocalStorage: true,优先级高于全局配置:

---
title: 【私密】我的个人学习笔记
date: 2025-10-15 10:00:00
categories: 个人记录
password: 123456 # 你的文章密码
# 新增:仅这篇文章禁用密码本地记忆,每次访问需输入
disableLocalStorage: true
abstract: "这是我的私人笔记,每次访问需输入密码~"
message: "请输入访问密码(每次访问都需验证)"
---

# 正文内容...

同样需执行 hexo clean && hexo g 重新生成,确保配置生效。

方案 3:手动清除已存储的密码(临时方案)

若只是偶尔需要 “重新输入密码”(比如借给他人使用后),无需修改配置,直接手动删除浏览器 localStorage 中存储的密码即可,步骤如下(以 Chrome 浏览器为例):

  1. 打开加密文章页面,按 F12Ctrl+Shift+I 打开「开发者工具」;
  2. 在 ”+“ 处切换到「Application」(应用程序)面板,左侧找到「本地存储」→ 展开后选择当前博客的域名(如 localhost:4000 或你的线上域名);
  3. 在右侧存储列表中,找到名称包含 hexo-blog-encrypt 或与文章标题相关的键(如 hexo-blog-encrypt_【私密】我的个人学习笔记),右键点击「Delete」删除该记录;
  4. 刷新页面,下次访问该文章就需要重新输入密码了。

三、关键说明

  1. 配置优先级:单篇文章的 disableLocalStorage: true > 全局配置的 disableLocalStorage: true,即单篇配置可覆盖全局规则(比如全局允许记忆,单篇强制每次输入);
  2. 浏览器兼容性:所有现代浏览器(Chrome、Edge、Safari 11+、Firefox 34+)均支持 localStorage,插件的记忆功能在这些浏览器中都会生效;
  3. 安全性localStorage 是 “浏览器本地存储”,仅保存在当前设备的浏览器中,不会上传到服务器,因此仅当前设备的当前浏览器能享受 “免输密码”,其他设备或浏览器访问仍需输入。

通过以上方案,即可实现 “每次访问加密文章都强制输入密码”,按需灵活控制密码验证频率。