imuncle.github.io icon indicating copy to clipboard operation
imuncle.github.io copied to clipboard

网站改造总结

Open imuncle opened this issue 6 years ago • 5 comments

前几天春节期间花了点时间把个人网站改造了一下,在这里做个总结Mark一下。

改造的念头来源于一次无意间翻到的一个在issue页面建立的博客(相当于只有后台的博客),我就有了要将网站与issue挂钩的想法。

之前我的网站是基于Editor.md的,以在本地写好相应的.md文件后push到GitHub上的方式来发表文章,也不是太麻烦,唯有一个遗憾,就是没有评论功能。去年的时候我接触过Gitment,但当时还不太了解GitHub,更别说issue了,而且Gitment需要手动为每个文章初始化一次,显得比较麻烦。现在作者网站的安全证书过期了,导致Gitment访问不是很稳定。

于是我决定自己来试着把GitHub的issues和comments都集成到我的网站里。

首先是注册一个GitHub的OAuth App,点这里可以注册。注册后可以拿到对应的client_idclient_secret

最开始我一直想通过纯JavaScript实现此功能,但总是遇到各种各样的问题,最后遇到了一个实在无解的问题,详情可以点这里,然后我发邮件询问GitHub,结果直接来了个官方劝退:

Exchanging a code for a token is not possible from a browser via JavaScript -- it's not something that our OAuth flow supports and you'll run into several problems stopping you if you try doing that. Instead, you'll need to have a server-side component which makes that request for exchanging the code for a token.

看来只能再来个服务端的程序了,怪不得Gitment老是要访问作者的那个网址。

我使用了最熟悉的PHP,代码很简单,如下:

<?php
$code = $_GET['code'];
$redirect_url = $_GET['state'];

$client_id = 'my client_id';
$client_secret = 'my client_secret';

$url = "https://github.com/login/oauth/access_token?client_id=".$client_id."&client_secret=".$client_secret."&code=".$code;
 
$html= file_get_contents($url);

$data = explode("&", $html);
$token = explode("=", $data[0]);
?>
<script>
window.location.href = '<?php echo $redirect_url; ?>&access_token='+'<?php echo $token[1]; ?>';
</script>

在获取到access_token后,我拿着这个token进一步获取到了登录用户的用户名和头像。

我直接使用了Gitment的css样式,具体样式可以直接拉到文章底部查看。

这里还有一个坑。其实也不算是坑,只是我不太了解OAuth,相关注意事项全都写在文档里面的。

我开始申请到access_token后,尝试添加评论,但是老是提示我Must have admin rights to Repository.,header提示403 Forbidden,这是没有访问repository的意思,后来我才知道,原来申请code的时候要在get参数里面加上'scpoe=public_repo`,才能授予用户修改的权限。

最后我又完善了一些分页功能,首页以列表形式展示issue的时候去除HTML标签。

然后就可以体验全新的网站啦。

关于这些功能的实现具体可以查看我的源代码issue-comment.js

imuncle avatar Feb 13 '19 07:02 imuncle

@imuncle nice!学习了!:smile:

顺便测试emoji 💯

XieSheng-qmaker avatar Feb 14 '19 02:02 XieSheng-qmaker

server_link 必须需要自己的吗 还是使用默认提供的也可以

vaeann avatar Dec 10 '19 10:12 vaeann

@vaeann 可以使用默认提供的,但不保证哪天更换服务器,因为我的学生优惠快到了。。

imuncle avatar Dec 10 '19 10:12 imuncle

我是个没有基础的小白,操作完只出现主页没有文章之类的 麻烦您有空帮我看一下排除下问题,起初我以为是服务器link的问题 看来不是 地址是 vaeann.githun.io

vaeann avatar Dec 10 '19 11:12 vaeann

@vaeann 加我QQ吧,点最下面的QQ图标就能跟我聊天

imuncle avatar Dec 10 '19 11:12 imuncle