hexo博文加密

介绍一种给博客文章加密的方法。

很多时候当我们写了一篇博客,但并不想所有人能够访问它。对于WordPress这很容易做到,但是对于hexo,由于是静态网页,并不能做到完全的加密。

在GitHub上发现了有个人做了一个加密的插件,还挺好用,推荐给大家。

安装

在你的hexo根目录的package.json文件夹中添加:

"hexo-blog-encrypt": "2.0.*"

然后在命令行中输入:

npm install

这样这个插件就安装好了。

找到根目录下的_config.yml文件,添加如下:

# Security
##
encrypt:
    enable: true

这样就可以使用插件了。

使用

在你要加密的文章头部写入password,例如:

---
title: Hello World
date: 2016-03-30 21:18:02
password: abc123
abstract: Welcome to my blog, enter password to read.
message: Welcome to my blog, enter password to read.
---

这样就可以需要输入密码访问了。

Bugs

  • 对于hexo-blog-encrypt2.0之前的版本,无法触发渲染mathjax的函数,需要进行升级。

  • 如果想对TOC进行加密,以next主题为例,将next/layout/_macro/sidebar.swig的文件替换为:

    `{% macro render(is_post) %}
      <div class="sidebar-toggle">
        <div class="sidebar-toggle-line-wrap">
          <span class="sidebar-toggle-line sidebar-toggle-line-first"></span>
          <span class="sidebar-toggle-line sidebar-toggle-line-middle"></span>
          <span class="sidebar-toggle-line sidebar-toggle-line-last"></span>
        </div>
      </div>
    
      <aside id="sidebar" class="sidebar">
        <div class="sidebar-inner">
    
          {% set display_toc = is_post and theme.toc.enable %}
          {% if page.encrypt == true %}
            {% if display_toc and toc(page.origin).length > 1 %}
              <ul class="sidebar-nav motion-element">
                <li class="sidebar-nav-toc sidebar-nav-active" data-target="post-toc-wrap" >
                  {{ __('sidebar.toc') }}
                </li>
                <li class="sidebar-nav-overview" data-target="site-overview">
                  {{ __('sidebar.overview') }}
                </li>
              </ul>
            {% endif %}
          {% else %}
            {% if display_toc and toc(page.content).length > 1 %}
              <ul class="sidebar-nav motion-element">
                <li class="sidebar-nav-toc sidebar-nav-active" data-target="post-toc-wrap" >
                  {{ __('sidebar.toc') }}
                </li>
                <li class="sidebar-nav-overview" data-target="site-overview">
                  {{ __('sidebar.overview') }}
                </li>
              </ul>
            {% endif %}
          {% endif %}
    
        <section class="site-overview sidebar-panel{% if not display_toc or toc(page.content).length <= 1 %} sidebar-panel-active{% endif %}">
          <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
            <img class="site-author-image" itemprop="image"
                 src="{{ url_for( theme.avatar | default(theme.images + '/avatar.gif') ) }}"
                 alt="{{ theme.author }}" />
            <p class="site-author-name" itemprop="name">{{ theme.author }}</p>
             {% if theme.seo %}
                <p class="site-description motion-element" itemprop="description">{{ theme.signature }}</p>
             {% else %}
                <p class="site-description motion-element" itemprop="description">{{ theme.description }}</p>
            {% endif %}
          </div>
          <nav class="site-state motion-element">
    
            {% if config.archive_dir != '/' %}
              <div class="site-state-item site-state-posts">
                <a href="{{ url_for(theme.menu.archives) }}">
                  <span class="site-state-item-count">{{ site.posts.length }}</span>
                  <span class="site-state-item-name">{{ __('state.posts') }}</span>
                </a>
              </div>
            {% endif %}
    
            {% if site.categories.length > 0 %}
              {% set categoriesPageQuery = site.pages.find({type: 'categories'}, {lean: true}) %}
              {% set hasCategoriesPage = categoriesPageQuery.length > 0 %}
              <div class="site-state-item site-state-categories">
                {% if hasCategoriesPage %}<a href="{{ url_for(categoriesPageQuery[0].path) }}">{% endif %}
                  <span class="site-state-item-count">{{ site.categories.length }}</span>
                  <span class="site-state-item-name">{{ __('state.categories') }}</span>
                {% if hasCategoriesPage %}</a>{% endif %}
              </div>
            {% endif %}
    
            {% if site.tags.length > 0 %}
              {% set tagsPageQuery = site.pages.find({type: 'tags'}, {lean: true}) %}
              {% set hasTagsPage = tagsPageQuery.length > 0 %}
              <div class="site-state-item site-state-tags">
                {% if hasTagsPage %}<a href="{{ url_for(tagsPageQuery[0].path) }}">{% endif %}
                  <span class="site-state-item-count">{{ site.tags.length }}</span>
                  <span class="site-state-item-name">{{ __('state.tags') }}</span>
                {% if hasTagsPage %}</a>{% endif %}
              </div>
            {% endif %}
    
          </nav>
    
          {% if theme.rss %}
            <div class="feed-link motion-element">
              <a href="{{ url_for(theme.rss) }}" rel="alternate">
                <i class="fa fa-rss"></i>
                RSS
              </a>
            </div>
          {% endif %}
    
          <div class="links-of-author motion-element">
            {% if theme.social %}
              {% for name, link in theme.social %}
                <span class="links-of-author-item">
                  <a href="{{ link }}" target="_blank" title="{{ name }}">
                    {% if theme.social_icons.enable %}
                      <i class="fa fa-fw fa-{{ theme.social_icons[name] | default('globe') | lower }}"></i>
                    {% endif %}
                    {{ name }}
                  </a>
                </span>
              {% endfor %}
            {% endif %}
          </div>
    
          {% set cc = {'by': 1, 'by-nc': 1, 'by-nc-nd': 1, 'by-nc-sa': 1, 'by-nd': 1, 'by-sa': 1, 'zero': 1} %}
          {% if theme.creative_commons in cc %}
            <div class="cc-license motion-element" itemprop="license">
              <a href="https://creativecommons.org/{% if theme.creative_commons === 'zero' %}publicdomain/zero/1.0{% else %}licenses/{{ theme.creative_commons }}/4.0{% endif %}/" class="cc-opacity" target="_blank">
                <img src="{{ url_for(theme.images) }}/cc-{{ theme.creative_commons }}.svg" alt="Creative Commons" />
              </a>
            </div>
          {% endif %}
    
          {# Blogroll #}
          {% if theme.links %}
            <div class="links-of-blogroll motion-element {{ "links-of-blogroll-" + theme.links_layout | default('inline') }}">
              <div class="links-of-blogroll-title">
                <i class="fa  fa-fw fa-{{ theme.links_icon | default('globe') | lower }}"></i>
                {{ theme.links_title }}
              </div>
              <ul class="links-of-blogroll-list">
                {% for name, link in theme.links %}
                  <li class="links-of-blogroll-item">
                    <a href="{{ link }}" title="{{ name }}" target="_blank">{{ name }}</a>
                  </li>
                {% endfor %}
              </ul>
            </div>
          {% endif %}
    
          {% include '../_custom/sidebar.swig' %}
    
        </section>
        {% if page.encrypt == true %}
          {% if display_toc and toc(page.origin).length > 1 %}
          <!--noindex-->
            <section class="post-toc-wrap motion-element sidebar-panel sidebar-panel-active">
              <div class="post-toc">
    
                {% if page.toc_number === undefined %}
                  {% set toc = toc(page.origin, { "class": "nav", list_number: theme.toc.number }) %}
                {% else %}
                  {% set toc = toc(page.origin, { "class": "nav", list_number: page.toc_number }) %}
                {% endif %}
    
                {% if toc.length <= 1 %}
                  <p class="post-toc-empty">{{ __('post.toc_empty') }}</p>
                {% else %}
                  <div class="post-toc-content">{{ toc }}</div>
                {% endif %}
    
              </div>
            </section>
          <!--/noindex-->
          {% endif %}
        {% else %}
          {% if display_toc and toc(page.content).length > 1 %}
          <!--noindex-->
            <section class="post-toc-wrap motion-element sidebar-panel sidebar-panel-active">
              <div class="post-toc">
    
                {% if page.toc_number === undefined %}
                  {% set toc = toc(page.content, { "class": "nav", list_number: theme.toc.number }) %}
                {% else %}
                  {% set toc = toc(page.content, { "class": "nav", list_number: page.toc_number }) %}
                {% endif %}
    
                {% if toc.length <= 1 %}
                  <p class="post-toc-empty">{{ __('post.toc_empty') }}</p>
                {% else %}
                  <div class="post-toc-content">{{ toc }}</div>
                {% endif %}
    
              </div>
            </section>
          <!--/noindex-->
          {% endif %}
        {% endif %}
    
        {% if theme.sidebar.b2t %}
          <div class="back-to-top">
            <i class="fa fa-arrow-up"></i>
            {% if theme.sidebar.scrollpercent %}
              <span id="scrollpercent"><span>0</span>%</span>
            {% endif %}
          </div>
        {% endif %}
    
      </div>
    </aside>
  {% endmacro %}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,486评论 1 45
  • 1. 设置主题风格 打开 themes/next/_config.yml 文件,搜索 scheme 关键字,将你...
    迟道阅读 21,131评论 10 47
  • title: hexo 安装与配置 categories: 工具 tags: [Hexo,GitHub,多说评论]...
    卞泽阅读 3,233评论 8 25
  • 身边总是会有一些情商比较低的朋友,即便相识多年,但有时候还是会被他们的行为或言语搞得不愉快,当然心里还是明白他们真...
    赵旭伟阅读 143评论 0 3
  • 群体的“道德”当群体是受某种高远的理念的激励而行动时,它便会表现出极高的“道德”。然而只是一种什么意义上的道德呢?...
    韩鱼鱼阅读 355评论 0 0