vercel反向代理解决gitalk跨域问题

又打开了评论…切换到了gitalk,原因是:

  1. 有评论比没评论好,如果朋友想交流的话则可以有联系方式
  2. 此前使用waline,因为官方大版本升级,我本地尝试升级了一下,没有弄好,所以切换到了gitalk
  3. gitalk配置相对简单,数据保存在github issue,相对长久和公开

以上。

gitalk如何配置网上可以搜到很多教程,基本都一致。

但是在配置验证时容易遇到“网络问题”, 如Error: Network Error有好的解决方案吗。此问题的根本原因是github跨域访问导致,gitalk通过https://cors-anywhere.azm.workers.dev/等代理接口来解决CORS问题,但是以上代理接口容易被墙,因此比较好的方法是通过自建服务器来转发和接收请求。

参考修改Gitalk代理地址,解决无法登录问题,我实现了如下版本,与原版本基本无差,但是该版本理论上可以适配github其他接口的转发。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
import requests
import flask
from flask_cors import CORS

app = flask.Flask(__name__)
CORS(app, resources=r'/*')

@app.route('/github/<path:ghpath>', methods=["GET", "POST"])
def github(ghpath):
    url = 'https://github.com/{}'.format(ghpath)
    params = {
        'client_id': flask.request.json['client_id'],
        'client_secret': flask.request.json['client_secret'],
        'code': flask.request.json['code']
    }
    headers = {
        'accept': 'application/json'
    }
    result = requests.post(url=url, params=params, headers=headers, verify=False)
    return result.json()

更方便地,可以通过vercel帮助运行和执行该函数,因此在github上创建了proxy-vercel,部署该函数后,在gitalk配置项中,将proxy项改为https://[vercel_proxy_domain]/github/login/oauth/access_token即可。