Gitalk Network Error问题处理

2022-12-29 17:40:26 浏览数 (1)

gitalk network error 个人博客问题兼容

近日突然发现个人博客的gitalk评论必现授权失败,于是查看了下原因,分析并记录问题解决办法

gitalk Network问题

打开个人博客页面,发现gitalk出现网络异常,F12看控制台,发现https://cors-anywhere.azm.workers.dev/https://github.com/login/oauth/access_token

这个连接访问失败,这个就是github获取accesstoken的代理链接,https://cors-anywhere.azm.workers.dev被墙了,导致代理失效。

因此要解决这个问题,可以自行搭建一个代理

gitalk 添加代理

代码语言:javascript复制
    const gitalk = new Gitalk({
      proxy: 'https://proxy'
    })

上述proxy是gitalk暴露出来的代理,通过这个代理可以访问github accesstoken,从而绕过gitalk自由代理。

并且gitalk的初始化不需要client_secret了,密钥可以放到代理服务器上,更安全了。

利用nodejs添加本地代理

代码语言:javascript复制
const http =  require("http")
const request = require('request')

const client_id = "xxxx"
const client_secret = "xxxx"
const proxy_url = "https://github.com/login/oauth/access_token"


http.createServer(function (req, res) {
    const {method ,headers} = req;
    if(method === 'POST') {
        if(req.url == '/get_accesstoken') {
            let msg = '';
            req.on('data', (data)=>{
                msg  = data
            })
            req.on('end', ()=> {
                let obj = JSON.parse(msg);
                if(obj.client_id != client_id) {
                    res.write("404");
                    res.end();
                    return;
                }
                request.post(proxy_url, {
                    headers: {
                        'content-type': 'application/json;charset=UTF-8',
                        'accept': 'application/json'
                    },
                    form: {
                        'client_id': client_id,
                        'client_secret': client_secret,
                        'code': obj.code,
                    },
                }, (err, grsp, gbody)=>{
                    res.write(gbody)
                    res.end()
                })
            })

        }
    }else{
        res.write('404 not Found')
        res.end()
    }
}).listen(9099);

监听本地端口9099,当向服务器请求get_accesstoken时,server转发请求到9099端口,即可请求github accesstoken

nginx 反向代理和跨域访问问题解决

通过代理的方式,不可避免的要解析跨域访问问题,如果利用nginx搭建服务器,则很好解决,下面直接贴上代码,

其中domain,都要替换为自有地址

代码语言:text复制
##

# Default server configuration
#
server {

  listen 80;
	server_name domain;

	rewrite ^(.*)$ https://domain$1 permanent;
}

server {
	listen 443 ssl;
	server_name domain;

	# ssl 证书
	ssl_certificate xxx.crt;
	ssl_certificate_key xxx.key;
	ssl_session_timeout 5m;

	location / {
        proxy_set_header X-Real_IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:9099;
        if ( $http_origin ~* (^http(s)?://.*pinkcle.com$) ){
          add_header Access-Control-Allow-Origin *;
          add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
          add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
        }
  }
}

然后重启ngxin,即可正常获取github的accesstoken了。

如有问题,欢迎留言讨论。

新开个人博客地址:https://pinkcle.com

0 人点赞