# 引言
终于又重启博客了,平时开发折腾过程中遇到的一些问题,感觉不错的会发布到博客中。
但是有些文章如果存在隐私内容,或者不打算公开的话,就不能放在博客中了,但是一些文章挂在网页上又可以方便自己查看,于是折腾了下 Hexo
的文章加密
# 调研
以前用 wordpress
的时候,也折腾过类似的需求,由于是 动态网站,所以其实还是比较方便的,这一次使用了Hexo
这个 静态博客 框架,说实话我都怀疑有没有可行的方案🤣🤣🤣
不过好在还是找到了一个 Hexo
插件 hexo-blog-encrypt
能够实现文章加密的需求
# 插件安装
使用如下命令安装
npm install hexo-blog-encrypt --save |
该插件的使用也很方便,使用时只需要在文章的 Front-matter
添加 password
即可。
--- | |
title: Hello World | |
date: 2022-05-13 21:18:02 | |
password: 12345 | |
--- |
下面展开讲一些比较实用的设置,更详细的可以查看官方文档。 D0n9X1n/hexo-blog-encrypt: Yet, just another hexo plugin for security.
# 全局加密配置
分别为每篇文章设置密码,虽然很灵活,但是配置或者修改起来非常麻烦。
好在,我们可以针对 tag
做全局统一配置,这样需要进行加密的文章,只需要引入指定的 tag
分类即可
Hexo
主配置文件_config.yml
中新增全局配置
# Security - hexo-blog-encrypt | |
encrypt: | |
silent: true | |
theme: xray | |
abstract: 这是一篇加密文章,需要密码才能继续阅读。 | |
message: 当前文章暂不对外可见,请输入密码后查看! | |
tags: | |
- {name: private, password: hello} | |
wrong_pass_message: 抱歉,您输入的密码错误,请检查后重新输入。 |
其中的 tag
部分可以定义多个,不同加密系列,采取不同的密码
- 文章头部
Front-matter
引入加密的tag
--- | |
title: Password Test | |
date: 2022-05-03 21:28:03 | |
tags: | |
- private | |
--- |
这样文章就被加密了,密码就是 private
标签对应的密码
- 全局加密豁免
可能有这样的情况,属于 private
标签下的某篇文章可能需要公开,不可能说把密码直接在描述信息中公开吧。
好在插件配置 优先级 为 文章Front-matter
> _config.yml配置
> 默认配置
这时候,可以在 Front-matter
中对加密设置进行覆盖,只需要在使用 加密tag
的前提下,结合 password
来实现即可。在博客文章的头部添加 password
并设置为 ""
就能取消当前文章的加密
--- | |
title: Password Test | |
date: 2022-05-03 21:28:03 | |
tags: | |
- private | |
password: "" | |
--- |
- 全局加密设置非全局密码
可能有如下场景,属于 private
标签下的某篇文章想要设置成不一样的密码。
还是利用配置的优先级在 Front-matter
中对加密设置进行覆盖即可,在博客文章的头部添加 password
并设置为 自定义密码 就可以使用 自定义密码 加密当前文章了
--- | |
title: Password Test | |
date: 2022-05-03 21:28:03 | |
tags: | |
- private | |
password: "special" | |
--- |
# Shoka 主题适配
# 解密后目录不显示
为文章设置了 加密 后查看 之后,不经意间发现这些文章的目录在解密后却不显示了。
在插件的 github issues
中有相关问题的讨论 解密后目录不会更新・Issue #16
主要原因就是加密的时候, post.content
会变成加密后的串,所以原来的 TOC
生成逻辑就会针对加密后的内容。
所以这边我只能把原来的内容存进 post.origin
字段。
Shoka 主题的针对修改如下:
- 主题文件
themes/shoka/layout/_macro/sidebar.njk
找到 宏render
,修改目录生成部分如下
<div class="inner"> | |
<!--modify begin--> |