前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Gitalk Network Error问题处理

Gitalk Network Error问题处理

原创
作者头像
ranky
修改2022-12-29 17:40:26
1.6K2
修改2022-12-29 17:40:26
举报
文章被收录于专栏:Coding改变生活Coding改变生活

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • gitalk network error 个人博客问题兼容
    • gitalk Network问题
      • gitalk 添加代理
        • 利用nodejs添加本地代理
          • nginx 反向代理和跨域访问问题解决
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档