背景
我用hexo创建了个博客,使用的主题是NEXT,并且在主题内配置了gitment评论功能。
然而最近评论功能失效,登录后提示[object ProgressEvent]就探索了下解决办法。
原因
一句话概括:实现gitment功能的代理服务,SSL
证书失效了。下面是过程分析。
在next
主题的gitment
代码里,可以看到根据主题内gitment
的mint配置,主题会引用不同的js文件,代码如下:
1 | {% if theme.gitment.mint %} |
分别查看两个js
文件内的gitment授权实现:
1 | if (query.code) { |
1 | if (query.code) { |
可以看到gitmint.browser.js
多了代理的功能,如果没有配置代理地址proxy_gateway
,二者均调用https://gh-oauth.imsun.net
;
如果配置了那么gitmint.broswer.js
会调用代理地址(gitment内ajaxFactory函数会使用代理地址)。
对于gitment模板:
1 | function renderGitment(){ |
可以看到,如果关闭了mint
或者不配置proxy_gateway
时,项目会用client_secret
渲染gitment
插件,调用https://gh-oauth.imsun.net
,带有client_id
,client_secret
参数;
如果开启了mint
并且配置了proxy_gateway
,渲染gitment
插件时不会传入client_secret
,所以此时需要通过其他方式让代理服务调用github oauth接口时带有client_secret
。
默认情况下,主题都是开启了mint
(mint
支持更丰富的gitment功能),并且将proxy_gateway
置为空。在地址https://gh-oauth.imsun.net
SSL 证书失效时,浏览器报错。
原理分析
github oauth 获取access_token的接口不支持CORS,那就需要一个支持CORS的服务进行代理,由该服务获取access_token,然后返回给浏览器。
CROS相关知识可以参考:阮一峰的日志《跨域资源共享 CORS 详解》
解决办法
自己部署一个代理服务,代码见:aishenghuomeidaoli/gh-oauth-server,已发起pull request。