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