南琴浪博客

Gitment - GitHub Issue 评论系统

01/10/2018

在之前的《Hexo 搬迁记》系列文章中,我提到过本站采用 Gitment 作为评论系统,并对其进行了一些介绍。这里再开一帖来对其进行更多的说明。

开始使用

关于如何为你的站点启用 Gitment,请参看这篇 原作者的文章,同时也可参看我之前的这两篇帖子:Hexo 搬迁记系列二 插件篇Hexo 搬迁记系列三 主题篇

我对 Gitment 进行了修改,并将它发布到了 Github

Gitment 的缺陷

Gitment 的确很方便,但他也有很明显的缺陷。这篇文章 手记4:谈谈Gitment中泄露secret的前因后果与解决方法 进行了很详细的说明。非常感谢那位博主的文章,以及他对我的疑问的详细的解答。

自建 Oauth CORS Service

在上面提到那篇文章中,那位博主很明确地提到了一点:Github OAuth 并不支持浏览器跨站访问。这使得仅仅只将 Gitment 插入网页而同时却没有一个解决 CORS 问题的措施的话,你的访客是无法调用 Github OAuth API 的,导致的结果就是访客无法登录你的 Gitment,并且你的 Gitment 也是无法加载出评论的。

对于这个问题,Gitment 原作者 imsun 提供了一个很方便的解决方案:Oauth Server。这是一个基于 Nodejs 的服务,作用是提供一个 CORS,以使客户得以调用 Github API。

如果直接使用原版 Gitment 的话,你会发现有一个指向 https://gh-oauth.imsun.net 的 access,这是原作者提供的一个服务,它会帮助你调用 Github API,然后返回一个 access_token。

当然,你也可以选择替换成你自己的,防止作者的服务哪天失联了。接下来介绍如何自建一个 Oauth Server

首先,你需要先运行这个服务:

git clone https://github.com/imsun/gh-oauth-server.git
npm install
npm start

以上完成后,Oauth Server 就会监听在你的 3000 端口上。接下来你需要修改 Gitment 的文件:gitment.jsgitment.browser.js,将这两个文件中的 “https://gh-oauth.imsun.net“ 替换为 你的服务器IP:3000。这样一来,你就应用了你自己的 Oauth Server 了。

当然,你也可以加入点别的特性,例如把它放到一个 HTTPS 上,就像 https://gh-oauth.imsun.net 一样。

要实现这个,以 Nginx 为例,建立一个 HTTPS Server,然后指定反代到后端的 Oauth Server:

server
    {
        location / {
        proxy_pass http://localhost:3000;
    }
}